Cuando trabajamos con macros en Excel y dependemos de que el usuario ingrese valores en algunas celdas de nuestra hoja, es común vernos en la necesidad de contar las celdas con datos de manera que podamos hacer las validaciones pertinentes. En esta ocasión mostraré un par de alternativas que tenemos para realizar ese tipo de cuenta desde VBA.
Para realizar el primer ejemplo de este artículo utilizaré los datos capturados en el rango A1:C10 y además necesitaré algunos botones de comando ActiveX que insertaré desde la ficha Programador y que serán los encargados de ejecutar el código VBA desde su evento Click.
La propiedad Count
Para nuestro primer ejemplo utilizaré el objeto Range y una de sus propiedades conocida como Count que nos indicará la cantidad exacta de celdas que conforman el rango indicado. Considera el siguiente código VBA:
Private Sub CommandButton21_Click() MsgBox Range("A1:C10").Count End Sub
El código ha sido insertado en el evento Click del botón de comando y mostrará un cuadro de diálogo con la cantidad de celdas del rango. Así que, al pulsar el botón obtendré el siguiente resultado:
Es importante recordar que la propiedad Count funcionará correctamente mientras el rango no exceda de 2,147,483,647 de celdas. Si necesitas contar una cantidad mayor de celdas, entonces será necesario utilizar la propiedad CountLarge.
Con este código hemos logrado contar la totalidad de celdas dentro de un rango específico, pero para poder contar las celdas con datos tenemos que restar aquellas celdas que están vacías y eso será precisamente lo que haremos en la siguiente sección.
El método SpecialCells
Una manera de conocer las celdas que están vacías es utilizar el objeto Range y su método SpecialCells el cual recibe un parámetro para indicar el tipo de celdas que deseamos obtener. Un posible valor para dicho parámetro es xlCellTypeBlanks que simboliza las celdas en blanco, así que podemos utilizar el siguiente código VBA:
Private Sub CommandButton22_Click() MsgBox Range("A1:C10").SpecialCells(xlCellTypeBlanks).Count End Sub
Al ejecutar este código obtendremos un resultado como el siguiente:
Ahora ya conoces el funcionamiento de la propiedad Count y del método SpecialCells así que podremos crear fácilmente una macro para contar las celdas con datos.
Macro para contar celdas con datos
Para poder contar las celdas que contienen datos dentro de un rango específico podemos restar las celdas en blanco del total de las celdas del rango. Eso lo podemos lograr con el siguiente código:
Private Sub CommandButton23_Click() MsgBox Range("A1:C10").Count - Range("A1:C10").SpecialCells(xlCellTypeBlanks).Count End Sub
Observa que no he introducido ninguna instrucción nueva sino que solamente he utilizado la propiedad Count para obtener el total de celdas y posteriormente he restado las celdas vacías con el método SpecialCells. Al ejecutar este código obtenemos el siguiente resultado:
El rango A1:C10 está formado por 30 celdas, de las cuales 5 están vacías, así que solo existen 25 celdas con datos por lo que el resultado de nuestra macro es correcto.
Más sobre el método SpecialCells
En este primer ejemplo he utilizado el método SpecialCells para contar las celdas en blanco de un rango pero es posible utilizar dicho método para contar celdas con ciertos tipos de dato especiales, como las celdas que contienen fórmulas o las celdas que tienen comentarios. Lo único que debes hacer es indicar el valor adecuado como su parámetro:
- xlCellTypeAllFormatConditions: Celdas de cualquier formato
- xlCellTypeAllValidation: Celdas que contienen criterios de validación
- xlCellTypeBlanks: Celdas vacías
- xlCellTypeComments: Celdas que contienen comentarios
- xlCellTypeConstants: Celdas que contienen constantes
- xlCellTypeFormulas: Celdas que contienen fórmulas
- xlCellTypeLastCell: La última celda del rango usado
- xlCellTypeSameFormatConditions: Celdas con el mismo formato
- xlCellTypeSameValidation: Celdas con los mismos criterios de validación
- xlCellTypeVisible: Todas las celdas visibles
En nuestro ejemplo utilizamos el valor xlCellTypeBlanks para contar las celdas en blanco de un rango, pero puedes hacer la prueba con los diferentes valores disponibles para el método SpecialCells.
La función CONTARA
Otra alternativa que tenemos para contar celdas con datos desde VBA es utilizar la función CONTARA que nos devolverá la cantidad de celdas que no están vacías. Sin embargo, debes recordar que para utilizar una función de Excel desde VBA es indispensable utilizar su nombre en inglés. El nombre en inglés de la función CONTARA es COUNTA.
Private Sub CommandButton21_Click() MsgBox WorksheetFunction.CountA(Range("A1:C10")) End Sub
Como argumento de la función COUNTA he indicado el mismo rango de celdas A1:C10 y como resultado obtenemos la cuenta de las celdas que contienen datos.
Este resultado concuerda con el del primer ejemplo, así que ahora ya conoces dos alternativas para contar las celdas con datos desde VBA. Finalmente dejo el vínculo de descarga del libro de trabajo utilizado en la creación de los ejemplos de este artículo.