HOWTO · VBA
Cómo verificar si una celda está vacía en Microsoft Excel VBA
Este artículo explica las formas de verificar si una celda está vacía en Microsoft Excel VBA.
En esta página
Para una celda de hoja de cálculo realmente vacía, IsEmpty(Range("A1").Value) es la comprobación habitual en VBA. Una fórmula que no muestra caracteres sigue siendo una fórmula, así que usa una comparación de cadenas o Len cuando ese resultado deba contar como vacío. Elige la comprobación que coincida con lo que tu macro necesita detectar.
Formas de verificar si una celda está vacía
Las celdas de Excel pueden contener constantes, fórmulas o ningún valor. El Empty de VBA es un estado de Variant, mientras que Null es un valor distinto; ninguno es intercambiable con una fórmula que evalúa a "". Los ejemplos usan A2 después de haberla borrado. Cuando tu libro usa fórmulas, decide si una fórmula que devuelve "" debe contar como vacía antes de elegir un método.
Método 1: la función IsEmpty
IsEmpty devuelve True cuando su argumento es un Variant sin inicializar. Una celda con una constante, una fórmula o un valor de error no es un Variant sin inicializar, aunque una fórmula no muestre nada. La siguiente ilustración de sintaxis comprueba A2; colócala en un módulo estándar de VBA y ejecuta CheckA2 después de borrar A2. VBA no puede ejecutarse con el entorno de ejecución de ejemplos configurado, por lo que este procedimiento no se ejecuta y no se afirma ninguna salida de tiempo de ejecución. Copia estas líneas en un módulo estándar de VBA:
Sub CheckA2()
If IsEmpty(Range("A2").Value) Then
MsgBox "A2 is blank"
Else
MsgBox "A2 contains a value or formula"
End If
End Sub
Con la configuración indicada de celda borrada, la rama If está diseñada para mostrar A2 is blank. Una fórmula en A2 que devuelve "" toma la rama Else porque la celda aún contiene una fórmula. También puedes pasar el objeto Range, pero .Value hace explícito el valor que se comprueba.
La ilustración siguiente muestra un ejemplo separado con una celda con contenido: A1 contiene el texto «Not empty», mientras que las filas debajo están vacías. Para esa configuración, IsEmpty(Range("A1").Value) devuelve False porque A1 contiene texto.
IsBlankes un nombre de función de hoja de cálculo de Excel, no una función de VBA que puedas llamar directamente. Si necesitas el comportamiento de una función de hoja de cálculo, usaApplication.WorksheetFunctiondonde sea compatible, o usa una comprobación de VBA cuya semántica se ajuste a la tarea.
Método 2: comparar con vbNullString
vbNullString es una constante de VBA que representa una cadena de longitud cero; no contiene el valor Null. If Range("A2").Value = vbNullString Then compara el valor de la celda con esa cadena. Esto reconoce como vacías una celda borrada y un resultado de fórmula de "", por lo que responde a una pregunta diferente de la de IsEmpty. Para una comprobación que tiene en cuenta las fórmulas y trata los errores antes de comparar, usa este procedimiento en lugar de CheckA2. VBA no puede ejecutarse con el entorno de ejecución de ejemplos configurado, por lo que el procedimiento no se ejecuta y no se afirma ninguna salida de tiempo de ejecución. Copia estas líneas en el mismo módulo estándar de VBA:
Sub CheckA2ForBlankResult()
If IsError(Range("A2").Value) Then
MsgBox "A2 contains an error"
ElseIf Range("A2").Value = vbNullString Then
MsgBox "A2 is blank or its formula returns an empty string"
Else
MsgBox "A2 contains a nonempty value"
End If
End Sub
Método 3: comparar con una cadena vacía
La comparación con el literal "" tiene un comportamiento similar de comparación de cadenas: If Range("A2").Value = "" Then. Es útil cuando tanto una celda borrada como un resultado de fórmula de "" deben seguir la misma rama. No demuestra que la celda no tenga fórmula o que esté realmente vacía. Comprueba HasFormula por separado si la distinción importa, y prueba IsError en una rama separada antes de comparar cuando pueda haber errores.
Método 4: la función Len
Len devuelve el número de caracteres de una representación en cadena. La condición If Len(Range("A2").Value) = 0 Then es útil cuando la pregunta es si el resultado tiene cero caracteres. También puede coincidir con un resultado de fórmula de ""; no lo distingue de una celda borrada. Los valores numéricos tienen una longitud de cadena distinta de cero, mientras que Len sobre un valor de error no es una comprobación general segura. Usa IsError primero cuando pueda haber errores.
Método 5: las funciones Count y Counta
Count cuenta las celdas numéricas de un rango; CountA cuenta las celdas que contienen datos, incluidos texto y fórmulas. Para una sola celda, Application.WorksheetFunction.Count(Range("A2")) = 0 significa que no tiene valor numérico, no necesariamente que esté vacía. CountA(Range("A2")) = 0 detecta una celda borrada, pero una fórmula que devuelve "" sigue contándose porque la celda contiene una fórmula. Para un rango de varias celdas, estas funciones devuelven recuentos, así que compáralos con el tamaño del rango solo si tu objetivo es determinar si cada celda cumple el criterio elegido.
Método 6: la función IsNull
IsNull comprueba si un Variant contiene el valor Null de VBA, usado a menudo para representar datos ausentes o desconocidos. Una celda de hoja de cálculo vacía ordinaria no es Null, por lo que IsNull(Range("A2").Value) no es una comprobación general de celda vacía y devuelve False en el ejemplo de la celda borrada. Úsala solo cuando tu fuente de datos de VBA realmente pueda proporcionar Null y ese sea el estado que quieres identificar.
Conclusión
Para una celda sin valor, usa IsEmpty sobre su .Value. Si una fórmula que devuelve "" también debe seguir la rama de vacío, compara con vbNullString o "", o comprueba Len frente a cero. Count pregunta si hay datos numéricos; CountA pregunta si la celda contiene datos o una fórmula. IsNull es para el valor Null distintivo de VBA. Protege las comparaciones y Len cuando pueda haber errores de hoja de cálculo, y usa HasFormula cuando importe la presencia de una fórmula.