Este tutorial le mostrará cómo usar la función COUNT de Excel en VBA
La función VBA COUNT se usa para contar la cantidad de celdas en su hoja de trabajo que tienen valores en ellas. Se accede mediante el método WorksheetFunction en VBA.
COUNT Hoja de trabajo Función
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.
123 | Sub TestCountFunctinoRange ("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 hacer referencia a un rango de celdas.
Este ejemplo a continuación contará cuántas celdas están pobladas con valores en las celdas D1 a D9
123 | Sub TestCount ()Rango ("D10") = Application.WorksheetFunction.Count (Range ("D1: D9"))End Sub |
El siguiente ejemplo contará cuántos valores hay en un rango en la columna D y en un rango en la columna F. Si no escribe el objeto Aplicación, se asumirá.
123 | Sub TestCountMultiple ()Rango ("G8") = WorksheetFunction.Count (Rango ("G2: G7"), Rango ("H2: H7"))End Sub |
Asignar un resultado de recuento a una variable
Es posible que desee utilizar el resultado de su fórmula en otro lugar del código en lugar de escribirlo directamente en un rango de Excel. Si este es el caso, puede asignar el resultado a una variable para usar más adelante en su código.
1234567 | Sub AssignCount ()Resultado atenuado como entero'Asignar la variableresultado = WorksheetFunction.Count (Range ("H2: H11"))'Muestra el resultadoMsgBox "La cantidad de celdas pobladas con valores es" & resultEnd Sub |
COUNT con un objeto de rango
Puede asignar un grupo de celdas al objeto Range y luego usar ese objeto Range con el Hoja de trabajo Función objeto.
123456789 | Sub TestCountRange ()Atenuar como rango'asignar el rango de celdasEstablecer rng = Rango ("G2: G7")'usa el rango en la fórmulaRango ("G8") = WorksheetFunction.Count (rng)'suelta el objeto de rangoEstablecer rng = NadaEnd Sub |
COUNT objetos de rango múltiple
De manera similar, puede contar cuántas celdas están pobladas con valores en múltiples Objetos de rango.
123456789101112 | Sub TestCountMultipleRanges ()Dim rngA como rangoDim rngB como rango'asignar el rango de celdasEstablecer rngA = Rango ("D2: D10")Establecer rngB = Rango ("E2: E10")'usa el rango en la fórmulaRango ("E11") = WorksheetFunction.Count (rngA, rngB)'suelta el objeto de rangoEstablecer rngA = NadaEstablecer rngB = NadaEnd Sub |
Usando COUNTA
El recuento solo contará los VALORES en las celdas, no contará la celda si la celda tiene texto. Para contar las celdas que están pobladas con cualquier tipo de datos, necesitaríamos usar la función CONTAR.
123 | Sub TestCountA ()Range ("B8) = Application.WorksheetFunction.CountA (Range (" B1: B6 "))End Sub |
En el siguiente ejemplo, la función CONTAR 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 CONTAR, sin embargo, contaría las celdas con Texto en ellas y devolvería un valor de 5 en la columna B sin dejar de devolver un valor de 4 en la columna C.
Usando COUNTBLANKS
La función COUNTBLANKS solo contará las celdas en blanco en el rango de celdas, es decir, las celdas que no contienen ningún dato.
123 | Sub TestCountBlank ()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 CONTAR.SI
Otra función de la hoja de trabajo que se puede utilizar es la función CONTAR.SI.
123456 | Sub TestCountIf ()Rango ("H14") = WorksheetFunction.CountIf (Rango ("H2: H10"), "> 0")Rango ("H15") = WorksheetFunction.CountIf (Rango ("H2: H10"), "> 100")Rango ("H16") = WorksheetFunction.CountIf (Rango ("H2: H10"), "> 1000")Rango ("H17") = WorksheetFunction.CountIf (Rango ("H2: H10"), "> 10000")End Sub |
El procedimiento anterior solo contará las celdas con valores si los criterios coinciden: mayor que 0, mayor que 100, mayor que 1000 y mayor que 10000. Debe poner los criterios entre comillas para que la fórmula funcione correctamente.
Desventajas de WorksheetFunction
Cuando usa el Hoja de trabajo Función para contar los valores en un rango en su hoja de trabajo, se devuelve un valor estático, no una fórmula flexible. Esto significa que cuando sus cifras en Excel cambian, el valor devuelto por el Hoja de trabajo Función no cambiará.
En el ejemplo anterior, el procedimiento TestCount ha contado las celdas de la columna H donde hay un valor. Como puede ver en la barra de fórmulas, este resultado es una cifra y no una fórmula.
Si alguno de los valores cambia por lo tanto en el rango (H2: H12), los resultados en H14 serán NO cambio.
En lugar de usar el Hoja de trabajo Función Cuenta, puede usar VBA para aplicar una función de conteo a una celda usando el Fórmula o Fórmula R1C1 métodos.
Usando el método de fórmula
El método de fórmula le permite apuntar específicamente a un rango de celdas, por ejemplo: H2: H12 como se muestra a continuación.
123 | Sub TestCountFormulaRango ("H14"). Fórmula = "= Recuento (H2: H12)"End Sub |
Usando el método FormulaR1C1
El método FromulaR1C1 es más flexible en el sentido de que no lo restringe a un rango establecido de celdas. El siguiente ejemplo nos dará la misma respuesta que el anterior.
123 | Sub TestCountFormula ()Rango ("H14"). Fórmula = "= Recuento (R [-9] C: R [-1] C)"End Sub |
Sin embargo, para hacer que la fórmula sea más flexible, podríamos modificar el código para que se vea así:
123 | Sub TestCountFormula ()ActiveCell.FormulaR1C1 = "= Recuento (R [-11] C: R [-1] C)"End Sub |
Dondequiera que se encuentre en su hoja de trabajo, la fórmula contará los valores en las 12 celdas directamente arriba y colocará la respuesta en su ActiveCell. Se debe hacer referencia al rango dentro de la función COUNT utilizando 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.