Función contar. Si. Conjunto en macro

Quisiera saber si alguien tiene la función contar. Si. Conjunto hecha macro ya que tengo un archivo donde la necesito pero al ser muchos datos se vuelve muy lenta mi máquina.

Respuesta
1

Este es un ejemplo, contar en la columna A los que sean mayores o iguales a 100 y que en la columna B tengan la letra "a"

El resultado son 3.

Sub usoContarSiConjunto()
    MsgBox WorksheetFunction.CountIfs(Range("A1:A10"), ">=100", Range("B1:B10"), "a")
End Sub

Nota: countifs, funciona sobre la columna que tenga valores numéricos.


Saludos. Dante Amor

¿Y si no son numéricos? Y si necesito más de un criterio en una misma columna o en diferentes, ¿cómo hago la referencia del criterio a una columna de una tabla especificada?

Gracias

1. Tienen que ser numéricos, si no son numéricos, entonces crea una columna y la llenas de números 1, la primer condición sería que esa columna sea =1

2. No puedes poner más de un criterio sobre una misma columna.

3. En diferentes columnas si puedes, tienes que poner el rango, criterio, rango, criterio, etc.

4. Rango a una columna de una tabla, puedes utilizar igualmente el rango de la columna de la hoja.


En el siguiente ejemplo, estoy buscando 4 criterios:

Que la persona sea "ana", que sea "banco", que sea "banser" y además que en la columna "D" tenga un 1, esta última columna, solamente es para contar, ya que las otras columnas tienen textos. Por último, los datos los tengo en una tabla.

El resultado de la macro es 3

Sub usoContarSiConjunto()
    MsgBox WorksheetFunction.CountIfs( _
        Range("A2:A11"), "ana", _
        Range("B2:B11"), "banco", _
        Range("C2:C11"), "banser", _
        Range("D2:D11"), "=1")
End Sub

Saludos.Dante Amor

2 respuestas más de otros expertos

Respuesta
1

Para que sea más rápido, utiliza la forma abreviada de especificación de rangos:

Sub contar_si_conjunto()
MsgBox (WorksheetFunction.CountIfs( _
[A1:A99000], "Isabel", _
[B1:B99000], "J.Ramón", _
[C1:C99000], "Sofía", _
[D1:D99000], "Antón", _
[E1:E99000], "Paloma", _
[I1:I99000], ">=5"))
End Sub

Esta macro busca en menos de un segundo, en 99000 filas con 6 criterios, uno de ellos numérico, sin necesidad de tener una columna auxiliar.

Si te ha valido la respuesta.

Respuesta
1

La solución "natural" que da Excel a tu cuestión es la función BDCONTARA, que cuenta en función de unos criterios que puedes definir como quieras.

Te pongo un ejemplo:

La función en este caso es: =BDCONTARA(A1:F102;"ProjectCodeTL";H1:K3), se cuentan los items del campo "ProjectCodeTL". En A1:F102 están los datos y en H1:K3 los criterios. Los criterios en la misma fila aplican como Y, los criterios en filas distintas aplican como O.

Por tanto aquí se cuentan las líneas cuyo ResponsableTL empieza por J o contine DIAZ, y el PVPosType contiene S y la Puntuación está entre 50 y 220.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas