Funciones de VBA COUNTIF y COUNTIFS

Este tutorial le mostrará cómo usar las funciones de Excel COUNTIF y COUNTIFS en VBA

VBA no tiene un equivalente de las funciones COUNTIF o COUNTIFS que puede usar: un usuario debe usar las funciones integradas de Excel en VBA usando el WorkSheetFunction objeto.

Hoja de trabajo COUNTIF 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 CONTAR.SI es una de ellas.

123 Sub TestCountIf ()Rango ("D10") = Application.WorksheetFunction.CountIf (Rango ("D2: D9"), "> 5")End Sub

El procedimiento anterior solo contará las celdas en Rango (D2: D9) si tienen un valor de 5 o mayor. Tenga en cuenta que debido a que está utilizando un signo mayor que, el criterio mayor que 5 debe estar entre paréntesis.

Asignar un resultado de CONTAR.SI 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 AssignSumIfVariable ()Atenuar el resultado como doble'Asignar la variableresultado = Application.WorksheetFunction.CountIf (Range ("D2: D9"), "> 5")'Muestra el resultadoMsgBox "El recuento de celdas con un valor superior a 5 es" & resultEnd Sub

Usando COUNTIFS

La función COUNTIFS es similar a la función COUNTIF WorksheetFunction pero le permite verificar más de un criterio. En el siguiente ejemplo, la fórmula contará el número de celdas en D2 a D9 donde el Precio de venta es mayor que 6 Y el Precio de costo es mayor que 5.

123 Sub UsingCountIfs ()Rango ("D10") = WorksheetFunction.CountIfs (Rango ("C2: C9"), "> 6", Rango ("E2: E9"), "> 5")End Sub

Usar CONTAR.SI 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 TestCountIFRange ()Dim rngCount como rango'asignar el rango de celdasEstablecer rngCount = Rango ("D2: D9")'usa el rango en la fórmulaRango ("D10") = WorksheetFunction.SUMIF (rngCount, "> 5")'suelta los objetos de rangoEstablecer rngCount = NadaEnd Sub

Uso de COUNTIFS en objetos de rango múltiple

Del mismo modo, puede utilizar COUNTIFS en varios objetos de rango.

123456789101112 Sub TestCountMultipleRanges ()Dim rngCriteria1 como rangoDim rngCriteria2 como rango'asignar el rango de celdasEstablecer rngCriteria1 = Rango ("D2: D9")Establecer rngCriteria2 = Rango ("E2: E10")'usa los rangos en la fórmulaRango ("D10") = WorksheetFunction.CountIfs (rngCriteria1, "> 6", rngCriteria2, "> 5")'suelta los objetos de rangoEstablecer rngCriteria1 = NadaEstablecer rngCriteria2 = NadaEnd Sub

Fórmula COUNTIF

Cuando usa el WorksheetFunction.COUNTIF para agregar una suma a 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 ha contado la cantidad de celdas con valores en Rango (D2: D9) donde el Precio de venta es mayor que 6, y el resultado se puso en D10. 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 en el rango (D2: D9), el resultado en D10 se NO cambio.

En lugar de usar el WorksheetFunction.SumIf, puede usar VBA para aplicar una función SUMIF a una celda usando el Fórmula o Fórmula R1C1 métodos.

Método de fórmula

El método de fórmula le permite apuntar específicamente a un rango de celdas, por ejemplo: D2: D9 como se muestra a continuación.

123 Sub TestCountIf ()Rango ("D10"). FórmulaR1C1 = "= CONTAR.SI (D2: D9," "> 5" ")"End Sub

Método FormulaR1C1

El método FormulaR1C1 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 TestCountIf ()Rango ("D10"). FórmulaR1C1 = "= CONTAR.SI (R [-8] C: R [-1] C," "> 5" ")"End Sub

Sin embargo, para hacer que la fórmula sea aún más flexible, podríamos modificar el código para que se vea así:

123 Sub TestCountIf ()ActiveCell.FormulaR1C1 = "= CONTAR.SI (R [-8] C: R [-1] C," "> 5" ")"End Sub

Dondequiera que se encuentre en su hoja de trabajo, la fórmula contará las celdas que cumplen con los criterios directamente encima y colocará la respuesta en su ActiveCell. Se debe hacer referencia al rango dentro de la función CONTAR.SI 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 D10 en lugar de un valor.

Su texto de enlace

wave wave wave wave wave