La aplicación de la función "Contar Si" se conoce en VBA como "CountIf". Esta función tiene como finalidad contar las celdas en un rango bajo un determinado criterio.
La sintaxis es bastante similar a Excel:
= CONTAR.SI (rango; criterio)
Sintaxis en VBA:
Application.WorksheetFunction.CountIf(Arg1 As Range, Arg2)
Ejemplo:
Supongamos que tenemos la relación de viajes realizados por la empresa ABC a diferentes ciudades del Perú y queremos saber la cantidad de veces que hemos viajado a cada una de ellas.
Por tanto, utilizamos CountIf para conocer la respuesta. A continuación, el código que utilizaríamos:
Sub ContarSi()
Dim x As Double
Dim ult As Double
Dim ult2 As Double
Worksheets("Hoja1").Select
ult = Cells(Rows.Count, 4).End(xlUp).Row
ult2 = Cells(Rows.Count, 2).End(xlUp).Row
For x = 4 To ult
dato = Worksheets("Hoja1").Cells(x, 4).Value
respuesta= Application.WorksheetFunction.CountIf(Worksheets("Hoja1").Range("B4:B" & ult2), dato)
Cells(x, 5).Value = respuesta
Next
End Sub
Para este ejemplo estamos utilizando las siguientes variables:
X: representa al número de fila que estamos buscando. Para lo cual utilizaremos en conjunto con la instrucción For Next.
Ult: para identificar la última fila en la relación de datos que representan el criterio de búsqueda (ciudades visitadas).
Ult2: para identificar la última fila en el rango de valores (Viajes realizados durante el año).
Dato: el valor que buscará, es decir la ciudad visitada.
Para este caso, estamos utilizando una instrucción For… Next que permite buscar el dato que necesitamos: "Ciudades Visitadas, en el rango de datos: Viajes Realizados durante el año".
La aplicación tiene como resultado una “respuesta”, que será colocada en la celda solicitada al final del código.
Resultado final:
Nota 1: Considerar que, al utilizar el código de la última fila para nuestras variables, nos permite aumentar información al archivo sin que se tenga que hacer alguna modificación al código.
Nota 2: Si se utilizan datos que se encuentran en distintas hojas, no olvidar especificar a qué hoja se hace referencia (Ej. Hoja1, Hoja2, o el nombre que se le coloque).
El desarrollo de este ejemplo es una de las tantas utilidades que puede tener esta función para aplicarla con macros, solo es cuestión de ir conociéndola y poco a poco encontrar la mejor manera de utilizarla para que nos pueda ayudar en lo que necesitemos.
Descargar archivo con ejemplo: Función WorkSheetFunction.CountIf