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 FormulaArray
per 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 ArrayFormula
quale 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.
ArrayFormula
risolverà per il seguente intervallo: {True,True,False,True,False}
.
CountIf
accetta solo qualsiasi intervallo e in questo caso può contare il numero di valori True.
Quindi possiamo avvolgere CountIf
i valori prodotti in ArrayFormula
questo 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 CountA
funziona nel modo strano, vedi la mia risposta qui