La función IsEmpty sirve para verificar si una celda (o rango) está vacía o no tiene datos. Si en una celda hubiera un espacio (el cual no se puede ver), Excel no reconocería a la celda como vacía. La función IsEmpty solo es efectiva cuando se usa en variables “variant”, esto debido a que las otras variables ya tienen un valor asignado por defecto en la declaración de las variables. Una variable es del tipo “variant” si no es explícitamente declarada como de otro tipo. Entonces, la función IsEmpty sirve para determinar si una variable ha sido alguna vez inicializada, es decir, si a esta variable se le ha asignado un valor.
El siguiente ejemplo es una forma sencilla de usar la función IsEmpty. Este ejemplo es sobre una cuota que tienen que pagar cada departamento de un edificio, y si un departamento no paga tal cuota, este tendría que pagar una multa. La macro usada es la siguiente:
Sub macro01()
For i = 3 To 17
If IsEmpty(Cells(i, 2)) Then
Cells(i, 3).Value = "MULTA"
End If
Next i
End Sub
Donde, las funciones “For” y “Next” sirven para que se analice desde la celda (3,2) hasta la celda (17,2). Y si una celda está vacía se asignará en la siguiente columna (misma fila) el valor de “multa”.
Adjunto el archivo: Función IsEmpty en VBA
Reyes Castillo, José Miguel
08/09/2013 a las 8:58 pm
Una función que tiene muchas aplicaciones, pero ¿cómo se haría entonces para poder identificar a aquellas celdas que no están definidas como una variable "variant"?. ¿Hay otra función que realiza lo mismo para otros tipos de variables? o no es posible en ese caso.
15/09/2013 a las 1:03 am
El uso de esta funcion es muy útil, ...me permitirá controlar mejor el envio de resultados de un grupo de personas al cierre de determinada fecha, pero seguiré leyendo para obtener otros datos mas complejos.
Codigo
Sub CeldasVacias()
'Obtener celdas vacias de coordinadores que no remitieron resultados
ult = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To ult
If IsEmpty(Cells(i, 2)) Then
Cells(i, 3).Value = "ENVIAR CORREO"
End If
Next i
End Sub
La aplicacion de macros es genial.
Lizbeth
03/11/2013 a las 11:57 pm
Esta fórmula me parece recontra útil, sobre todo para cuando se requiera revisar pendientes o se desee hacer seguimiento
11/04/2014 a las 9:04 am
Esta aplicación me parece interesante. Creo que se podría mejorar introduciendo una macro adicional para poder actualizar los pagos hechos a último momento y de esta manera exonerar de la multa a los que pagaron en último momento. Aqui va el código:
Sub macro01()
For i = 3 To 17
If IsEmpty(Cells(i, 2)) Then
Cells(i, 3).Value = "MULTA"
End If
Next i
End Sub
Sub Macro_inicio()
' Macro_inicio Macro
' Limpia la columna C para pode ractualizar los pagos hechos a última hora.
Range("C3:C17").Select
Selection.ClearContents
End Sub
Sub Macro_total()
Macro_inicio
macro01
End Sub
12/04/2014 a las 8:09 am
Esta función es una de las practicas que he visto. Interesante también el aporte de Lizbeth Paz. Trataré de buscarle una utilidad.
09/07/2014 a las 3:25 pm
El problema de que la función IsEmpty no reconoce a las celdas con uno o más 'espacios' como vacías, puede solucionarse incluyendo en la función condicional, a través de una función Or, lo siguiente:
Or InStr(1, Cells(i, 2), " ", vbTextCompare) ; con esta función se estaría revisando al mismo tiempo si las celdas de la columna 'Cuota' contienen 1 o más espacios, para considerarlas también como vacías y dar el aviso de multa.
De esta manera, siguiendo el ejemplo, el código quedaría como sigue:
Sub macro01()
For i = 3 To 17
If IsEmpty(Cells(i, 2)) Or InStr(1, Cells(i, 2), " ", vbTextCompare) Then
Cells(i, 3).Value = "MULTA"
End If
Next i
End Sub
12/07/2014 a las 6:41 pm
Los comentarios sobre los espacios hace que esta funcion no se del todo fiable, pero corrigiendo la orden como lo comenta nuestro amigo Carlos, aplica. Para aprovechar la funcion esta se puede utilizar en cumplimientos de planes de mantenimiento, si es que noha sido llenado, el cumplimiento por area es cero, o para definir cantidad algun KPI, si por ejemplo se registran las horas operativas de un equipo, sabremos que las vacias son horas fuera de servicio, con lo que podremos saber en un rango de horas su disponibilidad.
12/07/2014 a las 7:51 pm
Una función muy útil para poder revisar si existen espacios vacíos en hojas de excel que tienen muchos valores y que sería difícil revisarlas a simple vista. Sería bueno modificarla para que tambien reconozca los espacios que tal vez fueron introducidos por error.
15/02/2015 a las 8:02 am
Gracias buen hombre!
26/03/2015 a las 9:14 pm
También se podría añadir el código CountIf para contar los pagos y multas, luego sacar el producto con los respectivos montos en soles y así calcular lo que se debe recaudar según el ejemplo.
Muy buena aplicación!
01/06/2015 a las 11:34 am
excelente función y como podría utilizar esta función para rellenar numéricamente de 1 a n, (secuencia numérica) para las mismas celdas que estoy evaluando?
ejemplo
tengo estos datos
A2 Juan
A4 Pedro
A6 Felipe
debe quedar así
A2 1
A4 2
A6 3
Gracias
06/06/2015 a las 8:14 pm
que elegancia fue perfecto pues resulta que hice una macro para copiar datos con celdas vacias entre si, pero en cierto rango que no tenia datos se paraba el for pero este fue la solucion porque le cambie los datos para las columnas que yo necesitaba y fuera de eso un aviso que estan vacias y hay si me reconocia el aviso y lo pegaba donde yo lo necesito aqui dejo la aplicacion y muchas gracias y que Dios lo bendiga a usted y a los Suyos
'este era el for que tenia y funciona bien
For Each celda In Range("DQ2:DQ11")
If celda.Value >= 30 And celda.Value <= 39 Then
celda.Offset(0, 1035).Value = celda.Offset(0, 0).Value
End If
Next celda
'aqui esta la alteracion de la aplicacion que me saco del apuro
For i = 2 To 11
If IsEmpty(Cells(i, 1157)) Then
Range("ARL3").Value = "No Salio"
End If
Next i
'aqui era donde se paraba porque no tenia datos para seleccionar
Range("ARL2:ARL11").Select
Selection.SpecialCells(xlCellTypeConstants, 23).Select
Selection.COPY
Application.Goto Reference:="R2C128" 'este goto si lo necesito porque como sabe el donde lo va a descargar el dato para pegarlo
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
03/07/2015 a las 9:09 am
Una funcion importante, que puede ayudarnos a evaluar al final del mes si un trabajdor no asistio a su centro laboral ya que si colocamos en diferentes celdas los dias de la semana se veran vacias aquellas donde no asistio.
08/07/2015 a las 3:59 pm
hola tengo este código para verificar si el dato esta repetido y si no lo esta que guarde la información....
Private Sub CommandButton1_Click()
Dim strfila$, ctr As Control
Sheets("Base de datos").Select
If TextBox1 = "" Or TextBox2 = "" Or TextBox3 = "" Or TextBox4 = "" Or TextBox5 = "" Or TextBox6 = "" Or TextBox7 = "" Or ComboBox1 = "" Then
MsgBox "No dejes ningun campo en blanco", vbOKOnly + vbInformation, "AVISO"
TextBox1.SetFocus
'Exit Sub
End If
Set rango = Range("A:A").Find(What:=TextBox1, _
LookAt:=xlWhole, LookIn:=xlValues)
If rango Empty Then
MsgBox "El dato ya existe", vbOKOnly + vbInformation, "AVISO"
TextBox1.SetFocus
Exit Sub
End If
strfila$ = [A65536].End(xlUp).Offset(1, 0).Row
Range("A" & strfila$) = TextBox1
Range("B" & strfila$) = TextBox2
Range("C" & strfila$) = TextBox3
Range("D" & strfila$) = TextBox4
Range("E" & strfila$) = TextBox5
Range("F" & strfila$) = TextBox6
Range("G" & strfila$) = Val(TextBox7)
Range("G" & strfila$).NumberFormat = "$ #,##0"
Range("H" & strfila$) = ComboBox1
For Each ctr In Me.Controls
If TypeOf ctr Is MSForms.TextBox Then
ctr = ""
End If
Next ctr
Range("A" & strfila$ & ":H" & strfila$).HorizontalAlignment = xlCenter
TextBox1.SetFocus
End Sub
pero el error esta cuando intento guardar el dato. me aparece el siguiente mensaje
"se ha producido el error en tiempo de ejecución:
Variable de objeto o bloque With no establecido"
Alguien por favor me podría ayudar con este error, les agradecería. 🙂
14/09/2015 a las 2:11 pm
Muy buenas a todos:
Yo tengo una hoja, con una cuadricula de 10x10 , llamemosle range("A1:J10")
2 variables string (vacio y lleno)
y quiero que cada vez que el usuario introduce un numero, ejecute la un for next para comprobar si en el rango existe o no una celda vacia.
osea resto=lleno-vacio
Si la cuadricula no esta completa, osea, hay celdas vacias , debe dejar seguir introduciendo valores.
Si detecta que el rango esta completo
crea
he probado con if not isempty(range) pero no debo poner bien la sintaxis o no declaro bien las variables..
He probado con if count hasta que me devuelva valor 0 (no vacias.) y tampoco.. que estoiy haciendo mal? alguien me puede ayudar ? Mil gracias de antemano .
01/10/2015 a las 8:58 am
hola buenos días tengo un problema con una macro espero que me puedan ayudar:
tengo una base de datos en la que quiero poner un recordatorio con un botón para programar una alarma para que avise en la fecha predeterminada en una celda y que en la fecha "programada" envíe un MsgBox de la personan a la que se tiene que hablar, tengo un código:
Sub ProgramarAlarma()
Dim SetTime As String
SetDate = Hoja1.Range(“A1”).Text
Application.OnTime DateValue(“SetDate”), “EjecutarAlarma”
MsgBox “Alarma Programada”
End Sub
Sub EjecutarAlarma()
MsgBox ” hablar xxx”
End Sub
lo que requiero y si me puedes ayudar es:
que pueda cuando presione el botón tome la fecha que se encuentra en la celda definida, por ejemplo A1, A2, etc, que será la fecha para programar y que el mensaje de texto muestre el nombre de la persona que se encuentra en la misma fila a la que se le tiene que hablar, ejemplo D1, D2, etc. y si es posible que mande un correo electrónico avisando de esto.
Gracias.
28/01/2016 a las 2:57 pm
Buenas, quisiera realizar una macro donde evalue si un campo está vacio, si es así me de un mensaje de error y si no imprima un documento (como pdf). Tengo ambos pero no los puedo unir para que se cumpla la función IF. Me podrían ayudar?
Estos son los códigos para ambas tareas:
Sub TestCellA1()
'Test if the value is cell A1 is blank/empty
If IsEmpty(Range("W1").Value) = True Then
MsgBox "Colocar n° doc"
End If
ActiveSheet.ListObjects("Tabla17").Range.AutoFilter Field:=3, Criteria1:= _
""
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
End Sub
04/08/2016 a las 6:26 pm
Estoy buscando que un MSGBox que me evalue un rango de celdas, es decir si me excedo de X valor me arroje un mensaje de que en alguna celda de ese rango se ha excedido de lo permitido.
Espero me puedan ayudar,
Gracias!!
31/03/2017 a las 5:09 pm
Sub valor_en_rango()
‘va a buscar rango mayo por ejemplo a 3 en un rango ejemplo: para el rango B2:E10
filainicial = 2
filafinal = 10
columnainicial = 2
columnafinal = 4
For i = filainicial To filafinal
For j = columnainicial To columnafinal
If ActiveSheet.Cells(i, j) > 3 Then
MsgBox “ columna ” & j & “fila ” & i & "mayor a 3"
Else
End If
Next
Next
MsgBox “Macro finalizada, rango sin mayores a 3”
End Sub
07/09/2016 a las 12:41 pm
Necesito saber como quedaria una macro para que no se imprima una hoja si hay una celda vacia
Mil gracias
31/03/2017 a las 3:45 pm
Hola, no le entiendo su pregunta. pero asumo que busca algo que le diga si hay una celda vacía y en donde esta ubicada. y si no tiene celda vacia pues luego proceder a imprimir.
esta macro revisa vacíos en un rango que usted especifique, si encuentra uno, le dice en donde esta ubicado, en caso contrario le dice que no tiene vacios
Sub buscar_vacio_en_rango()
'va a buscar vacio en un rango ejemplo: para el rango B2:E10
filainicial = 2
filafinal = 10
columnainicial = 2
columnafinal = 4
For i = filainicial To filafinal
For j = columnainicial To columnafinal
If IsEmpty(ActiveSheet.Cells(i, j)) Then
MsgBox "vacio en columna " & j & "fila " & i
Else
End If
Next
Next
MsgBox "Macro finalizada, rango sin vacios"
End Sub
13/02/2017 a las 11:55 am
Hola grupo buen dia,
tengo una cosulta, como puedo modificar este código
Sub BuscarCeco()
'
' BuscarCeco Macro
'
' Acceso directo: CTRL+o
'
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[2],base,2,0)"
ActiveCell.Select
Selection.AutoFill Destination:=ActiveCell.Range("A1:A290")
ActiveCell.Range("A1:A290").Select
ActiveWindow.SmallScroll Down:=-6
End Sub
de tal forma que no se delimite por rango sino que se llene hasta donde la ultima fila de c este con datos. gracias y saludos