Voici ce que je pense être la meilleure solution à ce jour:
=CountIf(ArrayFormula(range<>""),TRUE)
Voici pourquoi en 3 étapes faciles
Étape 1: Simple As Pie - Ajouter une colonne supplémentaire
La réponse d'eniacAvenger donnera la bonne solution sans se soucier des cas de bord, car il =A1<>""
semble arriver à la valeur de vérité / falsification correcte en fonction de la façon dont nous pensons intuitivement aux cellules vides, que ce soit des blancs vierges ou des blancs créés.
Alors imaginez que nous avons ces données et que nous voulons le nombre de non-blancs dans 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 nous nous appuyions sur la colonne C , nous pourrions obtenir le nombre de valeurs dans B comme ceci:
=COUNTIF(C2:C6,True)
Étape 2: Utilisez FormulaArray
pour créer dynamiquement une colonne supplémentaire
Cependant, le commentaire de consideRatio est valide - si vous avez besoin d'une colonne supplémentaire, vous pouvez souvent atteindre le même objectif avec un ArrayFormula
qui peut créer une colonne en mémoire sans manger d'espace sur la feuille.
Donc, si nous voulons créer C dynamiquement, nous pouvons utiliser une formule matricielle comme celle-ci:
=ArrayFormula(B2:B6<>"")
Si nous le mettons simplement en C2, cela créerait le tableau vertical avec un seul trait de plume:
| | 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 |
Étape 3: Compter les valeurs dans la colonne dynamique
Mais avec cela résolu, nous n'avons plus besoin de la colonne pour simplement afficher les valeurs.
ArrayFormula
résoudra à la plage suivante: {True,True,False,True,False}
.
CountIf
prend juste dans n'importe quelle plage et dans ce cas peut compter le nombre de valeurs True.
Nous pouvons donc envelopper CountIf
les valeurs produites par ArrayFormula
comme ceci:
=CountIf(ArrayFormula(B2:B6<>""),TRUE)
Lectures complémentaires
Les autres solutions de ce fil sont soit trop complexes, soit échouent dans des cas particuliers que j'ai énumérés dans cette feuille de test:
Pour savoir pourquoi cela CountA
fonctionne de la manière bancale, voir ma réponse ici