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
NextTe 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