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?

Robbit
la source
6
CountA ne fonctionnerait-il pas pour vous? Voir également ce fil de discussion SO: stackoverflow.com/questions/12519073/…
Ozair Kafray
Duplication possible de Google Docs compte les cellules contenant du texte
KyleMit
Possible duplication de cellules Count qui contiennent du texte
Rubén

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".

eniacAvenger
la source
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.

Mike
la source
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.

Delta_zulu
la source
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

KyleMit
la source
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 <> ""))

Dávid Veszelovszki
la source
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.

consideRatio
la source
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

nomnom
la source
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""

spacepickle
la source
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

user300905
la source
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 .

Kpym
la source
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;

Kpym
la source
2

Dans Google Sheets, pour 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 d'EXCELXOR - https://excelxor.com/2015/03/30/counting-rows-where-at-least-one-condition-is-met/

Will Rice
la source
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.

Pablo
la source