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