Validar si los registros de una columna esta vacía en Macros Excel
Hola quiero validar que si una de mis columnas esta vacía me aparezca un msjbox.
Yo intento if IsEmpty(range("a2:a" , & uf)) then
msgbox "Verifique la columna X"
Gracias de antemano
1 respuesta
Te anexo la macro para revisar varias columnas, la macro revisa desde la columna A, hasta la última columna que tenga datos.
Supongo que los datos tienen encabezados, tal y como se muestra en la imagen.
En este caso, lo que hace la macro es revisar desde la columna A hasta la columna D, y te enviará 2 mensajes uno por la columna A y el otro por la columna C
Sub RevisarColumnas() 'Por.Dante Amor For i = 1 To Cells(1, Columns.Count).End(xlToLeft).Column u = Cells(Rows.Count, i).End(xlUp).Row If u = 1 Then u = 2 If Application.CountA(Range(Cells(2, i), Cells(u, i))) = 0 Then MsgBox "Verifique la columna: " & i End If Next End Sub
Ok esta bien tu macro pero yo solo quiero evaluar ciertas columnas y no todas.
Hago esto porque yo estoy copiando algunos campos de un libro1 a otro libro2 y lo estoy haciendo comparando los nombres de los campos. Ahora, puede ser que los nombres de los campos cambien quiero decir si es que no se encuentra el valor buscado que te muestre en un msgbox con el nombre de la cabecera que no ha encontrado antes de proceder a copiar.
Dim Filter As String Dim Title As String Dim FilterIndex As Integer Dim LIBRO1 As String Dim BuscarArchivo As Variant Application.DisplayAlerts = False Application.ScreenUpdating = False 'Variables de Selección Dim uf As Long Dim celdahoja1 As String Dim celdahoja2 As String If Hoja0.cmbMes.ListIndex = 0 Then Exit Function 'Ventana Emergente Filter = ("Archivos Excel 2010(*.xlsx), *.xlsx, Archivos Excel 2003 (*.xls), *.xls") FilterIndex = 1 Title = "Seleccione el Archivo a Procesar" ChDrive ("c") ChDir ("C:\Users\Juan Carlos\Desktop\INSATISFECHOS\BASE BRUTA") Dim varName As Variant varName = Application.GetOpenFilename(Filter, FilterIndex, Title) If varName = False Then Exit Function Workbooks.Open FileName:=varName LIBRO1 = varName BuscarArchivo = Mid$(LIBRO1, InStrRev(LIBRO1 , "\") + 1) ' Archivo elegido Hoja0.txtIndividuos = BuscarArchivo LIBRO1 = ActiveWorkbook.Name Sheets("DATA").Select uf = Range("A1048576").End(xlUp).Row uc_h1 = Range("A1").End(xlToRight).Column 'libro2 ThisWorkbook.Activate Sheets("SINDATA").Select uc_h2 = Range("A1").End(xlToRight).Column For i = 1 To uc_h2 ThisWorkbook.Activate Sheets("SINDATA").Select celdahoja2 = Cells(1, i).Value For j = 1 To uc_h1 Windows(LIBRO1).Activate Sheets("DATA").Select celdahoja1 = Cells(1, j).Value If celdahoja1 = celdahoja2 Then Sheets("DATA").Select Range(Cells(2, j).Address & ":" & Cells(uf, j).Address).Select Selection.Copy ThisWorkbook.Activate Sheets("SINDATA").Select Cells(2, i).Select ActiveSheet.Paste End If Next Next
Te adjunto mi código. Saludos.
Vamos por pasos, vas a copiar datos de un libro2 a un libro1. ¿Correcto?.
En qué fila están los campos, están en la fila 1 en ambos libros, ¿correcto?
Entonces si lo encuentra que copie, ¿correcto?.
Si no lo encuentra que te envié un mensaje, ¿correcto?
Sólo me queda una duda, si no lo encuentra y te envío un msgbox a la pantalla el proceso se va a detener varas veces. Mejor te pongo al final un solo msgbox con todos los campos que no se encontraron. ¿Te parece?
Si eso esta mucho mejor. Tienes razón, la función se va a detener varias veces y te va a lanzar varios msgbox.
Gracias por tu apoyo
Te regreso la macro con los campos
Sub CopiarColumnas() 'Por.Dante Amor ' Application.ScreenUpdating = False Set l1 = ThisWorkbook Set h1 = l1.Sheets("SINDATA") ' If Hoja0.cmbMes.ListIndex = 0 Then Exit Function 'Ventana Emergente ChDrive ("c") ChDir ("C:\Users\Juan Carlos\Desktop\INSATISFECHOS\BASE BRUTA") filtro = "Archivos Excel 2010(*.xlsx), *.xlsx, Archivos Excel 2003 (*.xls), *.xls" vName = Application.GetOpenFilename(filtro, 1, "Seleccione el Archivo a Procesar") If vName = False Then Exit Function ' Set l2 = Workbooks.Open(vName) Set h2 = l2.Sheets("DATA") For i = 1 To h2.Range("A1").End(xlToRight).Column Set b = h1.Rows(1).Find(h2.Cells(1, i)) If Not b Is Nothing Then u = h2.Cells(Rows.Count, i).End(xlUp).Row h2.Range(h2.Cells(2, i), h2.Cells(u, i)).Copy h1.Cells(2, b.Column) Else cad = cad & h2.Cells(1, i) & ", " End If Next l2.Close Application.ScreenUpdating = True If cad <> "" Then MsgBox "Campos no encontrados: " & Left(cad, Len(cad) - 2) Else MsgBox "Se copiaron todos los campos" End If End Sub
Ok lo voy a probar y te aviso. Gracias. Mas bien, por favor dame una mano para encontrar las frases en una fila. No se si me puedes dar una idea
La pregunta original era verificar si la columna estaba vacía:
"Quiero validar que si una de mis columnas esta vacía me aparezca un msjbox"
Después me lo cambiaste a esto:
"Puede ser que los nombres de los campos cambien quiero decir si es que no se encuentra el valor buscado que te muestre en un msgbox con el nombre de la cabecera que no ha encontrado antes de proceder a copiar"
Valora esta respuesta por las 2 macros que ya te entregué y crea un nueva pregunta con lo nuevo que requieres, en la nueva pregunta me explicas con ejemplos de cómo tienes la información y cuál es el resultado que esperas.
Saludos. Dante Amor
- Compartir respuesta