Dans une feuille de calcul Google: Comment compter les lignes d'une zone donnée qui ont une valeur? Toutes les allusions à ce sujet que j’ai trouvées jusqu’à présent conduisent à des formules qui comptent les lignes dont le contenu n’est pas vide (y compris la formule), mais une cellule contenant
=IF(1=2;"";"") // Shows an empty cell
est compté aussi bien.
Quelle est la solution à cette tâche simple?
Je viens d'utiliser =COUNTIF(Range, "<>")
et cela comptait les cellules non vides pour moi.
=counta(range)
counta
: "Retourne le nombre de values dans un jeu de données"
Remarque: CountA
considère que ""
est un valeur. Seules les cellules vides (appuyez sur la touche Suppr d'une cellule pour la supprimer) ne sont pas comptées.
Assistance Google: https://support.google.com/docs/answer/3093991
countblank
: "Retourne le nombre de cellules empty dans une plage donnée"
Remarque: CountBlank
considère à la fois les cellules vides (appuyez sur la touche Suppr pour supprimer une cellule) et les cellules dont la formule renvoie ""
à empty.
Support Google: https://support.google.com/docs/answer/3093403
Si vous avez une plage qui inclut des formules aboutissant à ""
, vous pouvez modifier votre formule à partir de
=counta(range)
à:
=Counta(range) - Countblank(range)
EDIT: la fonction est countblank
, pas countblanks
, ce dernier donnera une erreur.
=CountIf(ArrayFormula(range<>""),TRUE)
Le answer de eniacAvenger donnera la solution correcte sans se soucier des cas Edge, car =A1<>""
semble parvenir à la valeur vérité/falsification correcte en fonction de la façon dont nous pensons intuitivement aux cellules vides, vierges ou créées.
Alors imaginons 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 Column C, nous pourrions obtenir le nombre de valeurs dans B comme ceci:
=COUNTIF(C2:C6,True)
FormulaArray
pour créer de manière dynamique une colonne supplémentaireCependant, le commentaire de consideRatio est valide - si vous avez besoin d'une colonne supplémentaire, vous pouvez souvent atteindre le même objectif avec une variable ArrayFormula
qui peut créer une colonne en mémoire sans perdre de l'espace.
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 |
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
ne prend que n'importe quelle plage et peut compter le nombre de valeurs True.
Donc nous pouvons envelopper CountIf
autour des valeurs produites par ArrayFormula
comme ceci:
=CountIf(ArrayFormula(B2:B6<>""),TRUE)
Les autres solutions de ce thread sont soit trop complexes, soit échouent dans des cas Edge particuliers que j'ai énumérés dans cette feuille de test:
Pourquoi CountA
fonctionne-t-il de la même façon, voir ma réponse ici
Résolu à l'aide d'une solution trouvée par Google sur Google, par Yogi Anand: https://productforums.google.com/d/msg/docs/3qsR2m-1Xx8/sSU6Z6NYLOcJ
L'exemple ci-dessous compte le nombre de lignes non vides de la plage A3: C. N'oubliez pas de mettre à jour les deux plages de la formule avec votre plage d'intérêt.
=ArrayFormula(SUM(SIGN(MMULT(LEN(A3:C), TRANSPOSE(SIGN(COLUMN(A3:C)))))))
Veillez également à éviter les dépendances circulaires, par exemple si vous comptez le nombre de lignes non vides dans A: C et placez cette formule dans la colonne A ou C.
Une solution plus simple qui fonctionne pour moi:
=COUNTIFS(A:A;"<>"&"")
Il compte les nombres, les chaînes, les dates, etc. qui ne sont pas vides
Étant donné la plage A:A
, Id suggère:
=COUNTA(A:A)-(COUNTIF(A:A,"*")-COUNTIF(A:A,"?*"))
Le problème est que COUNTA comptabilise le nombre exact de cellules avec des chaînes de longueur nulle ""
.
La solution consiste à trouver le nombre exact de ces cellules. Cela peut être trouvé en recherchant toutes les cellules de texte et en soustrayant toutes les cellules de texte avec au moins un caractère
""
mais excluant les cellules vraiment vides""
mais excluant les cellules vraiment videsCela signifie que la valeur COUNTIF(A:A,"*")-COUNTIF(A:A,"?*")
doit correspondre au nombre de cellules de texte moins le nombre de cellules de texte comportant au moins un caractère, c'est-à-dire le nombre de cellules contenant exactement ""
.
Autant que je sache, la plupart des solutions ici comptent le nombre de cellules non vides, et non le nombre de lignes contenant des cellules non vides.
Une solution possible pour la plage B3:E29
est par exemple
=SUM(ArrayFormula(IF(B3:B29&C3:C29&D3:D29&E3:E29="";0;1)))
Ici, ArrayFormula(IF(B3:B29&C3:C29&D3:D29&E3:E29="";0;1))
renvoie une colonne de 0
(si la ligne est vide) et de 1
(else).
Un autre est donné dans la réponse de consideRatio .
Dans Google Sheets, compter le nombre de lignes contenant au moins une cellule non vide dans une plage à deux dimensions :
=ARRAYFORMULA(
SUM(
N(
MMULT(
N(A1:C5<>""),
TRANSPOSE(COLUMN(A1:C5)^0)
)
>0
)
)
)
Où A1: C5 est la plage que vous recherchez pour les lignes non vides.
La formule provient de, et est expliquée dans l'article suivant de EXCELXOR - https://excelxor.com/2015/03/30/counting-rows-where-at-least-one-condition-is-met /
C'est un travail pour moi:
=SUMPRODUCT(NOT(ISBLANK(F2:F)))
Nombre de cellules non vides de F2 à fin de la colonne
ARRAYFORMULA est un moyen très flexible de faire ce genre de choses.
A titre d'exemple, imaginez que vous souhaitiez compter des chaînes non vides (champs de texte), vous pouvez utiliser ce code:
=ARRAYFORMULA(SUM(IF(Len(B3:B14)>0, 1, 0)))
Ce qui se passe ici, c'est que "ArrayFormula" vous permet d'opérer sur un ensemble de valeurs. En utilisant la fonction SUM, vous indiquez "ArrayFormula" pour additionner toute valeur de l'ensemble. La clause "Si" sert uniquement à cocher "vide" ou "pas vide", 1 pour non vide et 0 sinon. "Len" renvoie la longueur des différents champs de texte. C'est là que vous définissez le jeu que vous voulez vérifier. Enfin, "ArrayFormula" totalisera 1 pour chaque champ de la série dans laquelle "len" renvoie plus de 0.
Si vous souhaitez vérifier toute autre condition, modifiez simplement le premier argument de la clause IF.
Vous pouvez définir une fonction personnalisée à l'aide du script Apps (Outils> Editeur de script) appelé par exemple numNonEmptyRows
:
function numNonEmptyRows(range) {
Logger.log("inside");
Logger.log(range);
if (range && range.constructor === Array) {
return range.map(function(a){return a.join('')}).filter(Boolean).length
}
else {
return range ? 1 : 0;
}
}
Puis utilisez-le dans une cellule comme celle-ci =numNonEmptyRows(A23:C25)
pour compter le nombre de lignes non vides dans la plage A23:C25
;