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 FormulaArraypara 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 ArrayFormulaque 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.
ArrayFormularesolverá de la siguiente gama: {True,True,False,True,False}.
CountIfsolo toma cualquier rango y en este caso puede contar el número de valores verdaderos.
Entonces podemos ajustar CountIflos valores producidos de ArrayFormulaesta 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 CountAsaber por qué funciona de la manera más inestable, vea mi respuesta aquí