Compter les lignes avec une valeur non vide


128

Dans une feuille de calcul Google: comment puis-je compter les lignes d'une zone donnée qui ont une valeur? Tous les indices à ce sujet que j'ai trouvés jusqu'à présent mènent à des formules qui comptent les lignes qui ont un contenu non vide (y compris la formule), mais une cellule avec

=IF(1=2;"";"")  // Shows an empty cell

est également compté.

Quelle est la solution à cette tâche simple?


6
CountA ne fonctionnerait-il pas pour vous? Voir également ce fil de discussion SO: stackoverflow.com/questions/12519073/…
Ozair Kafray


Réponses:


-12

Créez une autre colonne qui détermine si la cellule référencée est vide à l'aide de la fonction "CountBlank". Ensuite, utilisez le décompte des valeurs créées dans la nouvelle colonne "CountBlank".


3
Je considère cela comme une déclaration claire qu'il n'y a pas d'autre solution à cela. Merci beaucoup.
Robbit

Lorsque vous avez besoin d'ajouter une autre colonne, vous pouvez presque toujours la résoudre en utilisant des formules supplémentaires comme contenant un concatinate / split / join, etc., je vous répondrai si je le résous.
consideRatio

Par exemple, la ligne suivante forme une seule ligne à partir d'une plage de cellules 2d, ce qui peut souvent résoudre de nombreux problèmes: = split (ArrayFormula (concatenate (C3: O4 & ";")), ";") --- -
Je

J'ai publié une réponse qui résout l'objectif sans compter sur des colonnes séparées
consideRatio

203

Je viens de l'utiliser =COUNTIF(Range, "<>")et il a compté les cellules non vides pour moi.


14
Malheureusement, cette formule compte également les cellules avec des formules de résultats vides.
Dávid Veszelovszki

23
J'ai eu le même problème que @ DávidVeszelovszki [les formules ont été comptées]. J'ai résolu avec=COUNTIF(Range,"?*")
shawnrad

La question est de savoir comment compter les lignes dans une plage. Vous comptez les cellules dans une plage?
AnnanFay

124
=counta(range) 
  • counta: "Renvoie un décompte du nombre de valeurs dans un ensemble de données"

    Remarque: CountAconsidère ""comme une valeur . Seules les cellules vides (appuyez sur Supprimer dans une cellule pour la vider) ne sont pas comptées.

    Assistance Google: https://support.google.com/docs/answer/3093991

  • countblank: "Renvoie le nombre de cellules vides dans une plage donnée"

    Note: CountBlankconsidère les cellules vides (appuyez sur SUPPR pour une cellule vide) et les cellules qui ont une formule qui renvoie ""à être vides cellules.

    Assistance Google: https://support.google.com/docs/answer/3093403

Si vous avez une plage qui inclut des formules qui aboutissent "", vous pouvez modifier votre formule à partir de

=counta(range)

à:

=Counta(range) - Countblank(range)

EDIT: la fonction est countblank, non countblanks, cette dernière donnera une erreur.


5
Malheureusement, cela ne fonctionne pas pour les plages qui incluent à la fois des blancs vierges et des blancs calculés. (Il soustrait les blancs vierges non comptés de la valeur de
COUNTA

3
Merci pour les votes négatifs, l'OP a spécifiquement mentionné que la raison pour laquelle il a des blancs est à cause d'une formule comme = IF (1 = 2; ""; ""), et j'ai spécifiquement mentionné: "Si vous avez une plage qui comprend des formules qui result in "" ... "
Delta_zulu

La question est de savoir comment compter les lignes dans une plage. Vous comptez les cellules dans une plage?
AnnanFay

38

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 FormulaArraypour 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 ArrayFormulaqui 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.

ArrayFormularésoudra à la plage suivante: {True,True,False,True,False}.
CountIfprend juste dans n'importe quelle plage et dans ce cas peut compter le nombre de valeurs True.

Nous pouvons donc envelopper CountIfles valeurs produites par ArrayFormulacomme 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:

Feuille de calcul Google - Test CountA - Démo

Pour savoir pourquoi cela CountAfonctionne de la manière bancale, voir ma réponse ici


4
Cette réponse est la seule solution complète: elle ne compte avec succès que les cellules contenant du texte (y compris l'espace), des nombres et des valeurs VRAI / FAUX tout en excluant les blancs générés, les cellules vraiment vides et les erreurs (# N / A, #REF !, #VALUE , #NOM?) . Il renverra également 0 là où il n'y a pas de valeurs
spacepickle

2
Je suis un peu confus en lisant ceci, et j'ai accidentellement découvert que cette formule fonctionne aussi ... = CountIf (ArrayFormula (B2: B6 <> ""), TRUE) ... S'il vous plaît, ne vous méprenez pas, cette réponse est le meilleur, et devrait être davantage voté.
twindham

2
@twindham, a convenu qu'en termes de construction des blocs de cette réponse, il est probablement plus facile de garder chaque composant logique intact et de réorganiser ArrayFormula(...)pour renvoyer le tableau de valeurs à l'intérieur de CountIfcomme vous l'avez suggéré. J'ai mis à jour la réponse et la démo de la feuille de calcul. Ils feront tous les deux la même chose, mais la propreté est à côté de la bonté.
KyleMit

La question est de savoir comment compter les lignes dans une plage. Vous comptez les cellules non vides dans une seule colonne? Votre approche peut-elle fonctionner sur plusieurs colonnes?
AnnanFay

19

Pour moi, aucune des réponses n'a fonctionné pour les plages qui incluent à la fois des cellules vierges et des cellules vides basées sur une formule (par exemple =IF(1=2;"";""))

Voici ce qui a résolu le problème pour moi:

=COUNTA(FILTER(range, range <> ""))


Excellente solution dans le cas où une colonneb contient des formels qui renvoie une valeur ""! Merci beaucoup
user1561325

Malheureusement, il semble que si Filter()ne trouve aucun élément, il retournera #N/Aqui COUNTA()traite comme un élément et retournera donc toujours 1, même si le nombre doit être zéro. Exemple dans Google Sheets
KyleMit

7
@KyleMit Vous pouvez vous débarrasser du problème du comptage nul en ajoutant une valeur constante à la plage et en soustrayant 1 du nombre avec=COUNTA(filter({1;range},{1;range}<>"")) - 1
spacepickle

La question est de savoir comment compter les lignes dans une plage. Vous comptez les cellules dans une plage. Ce code est interrompu si vous essayez de l'appliquer à une plage de lignes.
AnnanFay

9

Résolu à l'aide d'une solution que j'ai trouvée 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 dans 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, cela se produira si vous comptez par exemple le nombre de lignes non vides dans A: C et placez cette formule dans la colonne A ou C.


1
J'ai trouvé une solution beaucoup plus propre, je l'ai postée comme une nouvelle réponse.
Dávid Veszelovszki

1
La seule solution qui répond à la question est de compter le nombre de lignes avec une cellule non vide à l'intérieur, et de ne pas compter le nombre de cellules non vides dans une plage.
Kpym

7

C'est du travail pour moi:

=SUMPRODUCT(NOT(ISBLANK(F2:F)))

Nombre de toutes les cellules non vides de F2 à la fin de la colonne


5

Compte tenu de la gamme A:A, Id suggère:

=COUNTA(A:A)-(COUNTIF(A:A,"*")-COUNTIF(A:A,"?*"))

Le problème est que COUNTA sur-compte exactement le nombre de cellules avec des chaînes de longueur nulle "".

La solution est de trouver exactement 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

  • COUNTA (A: A): cellules avec valeur, y compris ""mais excluant les cellules vraiment vides
  • COUNTIF (A: A, "*"): cellules reconnues comme du texte, y compris ""mais excluant les cellules vraiment vides
  • COUNTIF (A: A, "? *"): Cellules reconnues comme texte avec au moins un caractère

Cela signifie que la valeur COUNTIF(A:A,"*")-COUNTIF(A:A,"?*")doit être le nombre de cellules de texte moins le nombre de cellules de texte qui ont au moins un caractère, c'est-à-dire le nombre de cellules contenant exactement""


En utilisant la feuille de démonstration @KyleMit, j'ai trouvé que cette formule était toujours supérieure aux comptes car elle incluait toutes les cellules avec des erreurs
spacepickle

Il y a une différence entre une cellule qui contient une chaîne de longueur nulle et une cellule qui ne contient rien du tout? C'est ce qui fait que les gens se méfient des ordinateurs. . . Voyez-vous pourquoi nous ne pouvons pas avoir de belles choses?
Cheeso

La question est de savoir comment compter les lignes dans une plage. Vous comptez les cellules dans une plage?
AnnanFay

5

Une solution plus simple qui fonctionne pour moi:

=COUNTIFS(A:A;"<>"&"")

Il compte à la fois les nombres, les chaînes, les dates, etc. qui ne sont pas vides


5
pourrait être simplifié sous une forme comme = COUNTIF (A: A, "<>")
Tom

La question est de savoir comment compter les lignes dans une plage. Vous comptez les cellules dans une plage?
AnnanFay

3

Autant que je puisse voir, la plupart des solutions ici comptent le nombre de cellules non vides, et non le nombre de lignes avec une cellule non vide à l'intérieur.

Une solution possible pour la gamme B3:E29est 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 1(sinon).

Un autre est donné dans la réponse de consideRatio .


2

Vous pouvez définir une fonction personnalisée à l'aide d'Apps Script (Outils> Éditeur de script) appelée 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;
  }
}

Et 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;



1

Une manière très flexible de faire ce genre de choses est d'utiliser ARRAYFORMULA.

À titre d'exemple, imaginez que vous souhaitez compter les 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 SOMME, vous indiquez "ArrayFormula" pour additionner toute valeur de l'ensemble. La clause "If" sert uniquement à cocher "vide" ou "non 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 l'ensemble (plage) que vous souhaitez vérifier. Enfin, "ArrayFormula" fera la somme de 1 pour chaque champ à l'intérieur de l'ensemble (plage) dans lequel "len" renvoie plus de 0.

Si vous souhaitez vérifier une autre condition, modifiez simplement le premier argument de la clause IF.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.