Esto es lo que creo que es la mejor solución hasta ahora:
=CountIf(ArrayFormula(range<>""),TRUE)
He aquí por qué en 3 sencillos pasos
Paso 1: simple como un pastel: agregue una columna adicional
La respuesta de eniacAvenger proporcionará la solución correcta sin preocuparse por los casos límite, ya que =A1<>""
parece llegar al valor correcto de verdad / falsedad en función de cómo pensamos intuitivamente en las celdas en blanco, ya sea en blanco virgen o en blanco creado.
Así que imagine que tenemos estos datos y queremos el recuento de no espacios en blanco en B2:B6
:
| | A | B | C |
|---|-------------|-------|---------|
| 1 | Description | Value | B1<>"" |
| 2 | Text | H | TRUE |
| 3 | Number | 1 | TRUE |
| 4 | IF -> "" | | FALSE |
| 5 | IF -> Text | h | TRUE |
| 6 | Blank | | FALSE |
Si confiamos en la Columna C , podríamos obtener el recuento de valores en B así:
=COUNTIF(C2:C6,True)
Paso 2: Úselo FormulaArray
para crear dinámicamente Columna adicional
Sin embargo, el comentario de consideRatio es válido: si necesita una columna adicional, a menudo puede lograr el mismo objetivo con el ArrayFormula
que puede crear una columna en la memoria sin ocupar espacio en la hoja.
Entonces, si queremos crear C dinámicamente, podemos usar una fórmula de matriz como esta:
=ArrayFormula(B2:B6<>"")
Si simplemente lo ponemos en C2, crearía la matriz vertical con un solo trazo del lápiz:
| | A | B | C |
|---|-------------|-------|--------------------------|
| 1 | Description | Value | =ArrayFormula(B2:B6<>"") |
| 2 | Text | H | TRUE |
| 3 | Number | 1 | TRUE |
| 4 | IF -> "" | | FALSE |
| 5 | IF -> Text | h | TRUE |
| 6 | Blank | | FALSE |
Paso 3: contar valores en una columna dinámica
Pero con eso resuelto, ya no necesitamos que la columna simplemente muestre los valores.
ArrayFormula
resolverá de la siguiente gama: {True,True,False,True,False}
.
CountIf
solo toma cualquier rango y en este caso puede contar el número de valores verdaderos.
Entonces podemos ajustar CountIf
los valores producidos de ArrayFormula
esta manera:
=CountIf(ArrayFormula(B2:B6<>""),TRUE)
Otras lecturas
Las otras soluciones en este hilo son demasiado complejas o fallan en casos extremos particulares que he enumerado en esta hoja de prueba:
Para CountA
saber por qué funciona de la manera más inestable, vea mi respuesta aquí