VBA Contar (Función Contar)

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Dennis Madrid

Last updated on febrero 22, 2022

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

funcion WorksheetFunction Count

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

funcion Contar Asignar A Variable

 

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.

funcion Contara

 

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.

prueba Contar Blancos

 

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.

prueba Contar Si

 

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á.

prueba Count Estatico

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

prueba Count formula

 

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

Prueba Count FormulaR1C1

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.

vba-free-addin

Complemento de Ejemplos de Código de VBA

Acceda fácilmente a todos los ejemplos de código que se encuentran en nuestro sitio.

Simplemente navegue al menú, haga clic y el código se insertará directamente en su módulo. Complemento .xlam.

(¡No se requiere instalación!)

Descarga gratuita

Return to VBA Code Examples