VBA Contar (Función Contar)
In this Article
Este tutorial le mostrará cómo utilizar la función COUNT de Excel en VBA La función COUNT de VBA se utiliza para contar el número de celdas de la hoja de cálculo que tienen valores. Se accede a ella utilizando el método WorksheetFunction en VBA.
COUNT WorksheetFunction
El objeto WorksheetFunction se puede utilizar para llamar a la mayoría de las funciones de Excel que están disponibles en el cuadro de diálogo Insertar función en Excel. La función COUNT es una de ellas.
Sub pruebaDeFuncionCount()
Range("D33") = Application.WorksheetFunction.Count(Range("D1:D32"))
End Sub
Puede tener hasta 30 argumentos en la función COUNT. Cada uno de los argumentos debe referirse a un rango de celdas. Este ejemplo de abajo contará cuántas celdas están pobladas con valores en las celdas D1 a D9
Sub pruebaFuncionContar()
Range("D10") = Application.WorksheetFunction.Count(Range("D1:D9"))
End Sub
El ejemplo siguiente contará cuántos valores hay en un rango de la columna G y en un rango de la columna H. Si no escribe el objeto Application, se asumirá.
Sub pruebaFuncionContarRangosMultiples()
Range("G8") = WorksheetFunction.Count(Range("G2:G7"), Range("H2:H7"))
End Sub
Asignación de un resultado de recuento a una variable
Puede que quieras utilizar el resultado de tu fórmula en otra parte del código en lugar de escribirlo directamente en un rango de Excel. Si este es el caso, puedes asignar el resultado a una variable para usarla más tarde en tu código.
Sub funcionContarAsignarAVariable()
Dim resultado As Integer
'asignar la variable
resultado = WorksheetFunction.Count(Range("H2:H11"))
'Mostrar el resultado
MsgBox "El número de celdas con valores en el rango H2:H11 es " & resultado
End Sub
CONTAR un Objeto Range
Puede asignar un grupo de celdas al objeto Range, y luego utilizar ese objeto Range con el objeto WorksheetFunction.
Sub pruebaContarRango()
Dim rng As Range
'asignar el rango de celdas
Set rng = Range("G2:G7")
'utilizar el rango en la fórmula
Range("G8") = WorksheetFunction.Count(rng)
'liberar el objeto rng
Set rng = Nothing
End Sub
CONTAR múltiples Objetos Range
De manera similar, puedes contar cuántas celdas están pobladas con valores en múltiples objetos de rango.
Sub pruebaContarMultiplesRangos()
Dim rngA As Range
Dim rngB As Range
'asignar el rango de celdas
Set rngA = Range("D2:D10")
Set rngB = Range("E2:E10")
'utilizar el rango en la fórmula
Range("E11") = WorksheetFunction.Count(rngA, rngB)
'liberar los objetos.
Set rngA = Nothing
Set rngB = Nothing
End Sub
Uso de COUNTA
La función COUNTA sólo contará los VALORES en las celdas, no contará la celda si la celda tiene texto en ella. Para contar las celdas que están pobladas con cualquier tipo de datos, necesitaríamos usar la función COUNTA.
Sub pruebaCountA()
Range("B8") = Application.WorksheetFunction.CountA(Range("B1:B6"))
End Sub
En el ejemplo de abajo, la función COUNT devolvería un cero ya que no hay valores en la columna B, mientras que devolvería un 4 para la columna C. La función COUNTA, sin embargo, contaría las celdas con texto en ellas y devolvería un valor de 5 en la columna B mientras que seguiría devolviendo un valor de 4 en la columna C.
Uso de COUNTBLANKS
La función COUNTBLANKS sólo contará las celdas en blanco en el rango de celdas – es decir, las celdas que no tienen ningún dato en ellas.
Sub pruebaContarBlancos()
Range("B8") = Application.WorksheetFunction.CountBlanks(Range("B1:B6"))
End Sub
En el siguiente ejemplo, la columna B no tiene celdas en blanco mientras que la columna C tiene una celda en blanco.
Uso de la función COUNTIF
Otra función de la hoja de cálculo que se puede utilizar es la función COUNTIF.
Sub pruebaContarSi()
Range("H14") = WorksheetFunction.CountIf(Range("H2:H10"), ">0")
Range("H15") = WorksheetFunction.CountIf(Range("H2:H10"), ">100")
Range("H16") = WorksheetFunction.CountIf(Range("H2:H10"), ">1000")
Range("H17") = WorksheetFunction.CountIf(Range("H2:H10"), ">10000")
End Sub
El procedimiento anterior sólo contará las celdas con valores en ellas si se cumplen los criterios: mayor que 0, mayor que 100, mayor que 1000 y mayor que 10000. Tienes que poner los criterios entre comillas para que la fórmula funcione correctamente.
Desventajas de WorksheetFunction
Cuando usas la WorksheetFunction para contar los valores de un rango en tu hoja de cálculo, se devuelve un valor estático, no una fórmula flexible. Esto significa que cuando tus cifras en Excel cambian, el valor que ha sido devuelto por la WorksheetFunction no cambiará.
En el ejemplo anterior, el procedimiento TestCount ha contado las celdas de la columna H en las que hay un valor. Como puedes ver en la barra de fórmulas, este resultado es una cifra y no una fórmula. Por lo tanto, si alguno de los valores cambia en el Rango(H2:H12), los resultados en H14 NO cambiarán.
En lugar de utilizar WorksheetFunction.Count, puedes utilizar VBA para aplicar una función de recuento a una celda utilizando los métodos Formula o FormulaR1C1.
Utilizando el método de Formula
El método formula le permite apuntar específicamente a un rango de celdas, por ejemplo: H2:H12 como se muestra a continuación.
Sub PruebaCountFormula
Range("H14").Formula = "=Count(H2:H12)"
End Sub
Usando el método FormulaR1C1
El método FromulaR1C1 es más flexible en el sentido de que no te restringe a un rango de celdas determinado. El siguiente ejemplo nos dará la misma respuesta que el anterior.
Sub PruebaCountFormulaR1C1()
Range("H14").Formula = "=Count(R[-12]C:R[-2]C)"
End Sub
Sin embargo, para hacer la fórmula más flexible, podríamos modificar el código para que se vea así
Sub PruebaCountFormulaR1C1()
ActiveCell.FormulaR1C1 = "=Count(R[-12]C:R[-2]C)"
End Sub
En cualquier lugar de la hoja de cálculo, la fórmula contará los valores de las 12 celdas que están justo encima y colocará la respuesta en su CeldaActiva. El Rango dentro de la función COUNT tiene que ser referido usando la sintaxis de Fila (R) y Columna (C). Ambos métodos le permiten utilizar fórmulas dinámicas de Excel dentro de VBA. Ahora habrá una fórmula en H14 en lugar de un valor.