Ecco quello che credo sia la soluzione migliore finora:
=CountIf(ArrayFormula(range<>""),TRUE)
Ecco perché in 3 semplici passaggi
Passaggio 1: Semplice come torta - Aggiungi colonna aggiuntiva
La risposta di eniacAvenger produrrà la soluzione corretta senza preoccuparsi dei casi limite come =A1<>""sembra arrivare al valore di verità / falsità corretto in base al modo in cui intuitivamente pensiamo alle celle vuote, sia vergini che vuote.
Quindi immagina di avere questi dati e vogliamo il conteggio dei non-spazi in 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 |
Se facessimo affidamento sulla colonna C , potremmo ottenere il conteggio dei valori in B in questo modo:
=COUNTIF(C2:C6,True)
Passaggio 2: utilizzare FormulaArrayper creare dinamicamente una colonna aggiuntiva
Però, il commento di consideRatio è valido: se hai bisogno di una colonna aggiuntiva, puoi spesso raggiungere lo stesso obiettivo con un ArrayFormulaquale può creare una colonna in memoria senza occupare spazio nel foglio.
Quindi, se vogliamo creare C in modo dinamico, possiamo usare una formula di matrice come questa:
=ArrayFormula(B2:B6<>"")
Se lo mettessimo semplicemente in C2, creerebbe l'array verticale con un solo tratto della penna:
| | 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 |
Passaggio 3: contare i valori nella colonna dinamica
Ma con quello risolto, non abbiamo più bisogno della colonna per visualizzare semplicemente i valori.
ArrayFormularisolverà per il seguente intervallo: {True,True,False,True,False}.
CountIfaccetta solo qualsiasi intervallo e in questo caso può contare il numero di valori True.
Quindi possiamo avvolgere CountIfi valori prodotti in ArrayFormulaquesto modo:
=CountIf(ArrayFormula(B2:B6<>""),TRUE)
Ulteriori letture
Le altre soluzioni in questo thread sono eccessivamente complesse o falliscono in casi limite particolari che ho elencato in questo foglio di prova:
Per quale motivo CountAfunziona nel modo strano, vedi la mia risposta qui