Zählen Sie Zeilen mit nicht leerem Wert

128

In einer Google-Tabelle: Wie kann ich die Zeilen eines bestimmten Bereichs zählen, die einen Wert haben? Alle Hinweise, die ich bisher gefunden habe, führen zu Formeln, die die Zeilen zählen, die keinen leeren Inhalt (einschließlich Formel) haben, sondern eine Zelle mit

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

wird ebenfalls gezählt.

Was ist die Lösung für diese einfache Aufgabe?

Robbit
quelle
6
Würde CountA nicht für Sie arbeiten? Siehe auch diesen SO-Thread: stackoverflow.com/questions/12519073/…
Ozair Kafray
Mögliches Duplikat von Count-Zellen, die Text enthalten
Rubén

Antworten:

-11

Erstellen Sie mit der Funktion "CountBlank" eine weitere Spalte, die bestimmt, ob die referenzierte Zelle leer ist. Verwenden Sie dann count für die Werte, die in der neuen Spalte "CountBlank" erstellt wurden.

eniacAvenger
quelle
3
Ich betrachte dies als eine klare Aussage, dass es dafür keine andere Lösung gibt. Vielen Dank.
Robbit
Wenn Sie eine weitere Spalte hinzufügen müssen, können Sie diese fast immer mit zusätzlichen Formeln wie Concatinate / Split / Join usw. lösen. Wenn ich sie löse, melde ich mich bei Ihnen.
ConsideRatio
In der folgenden Zeile wird beispielsweise eine einzelne Zeile aus einem 2D-Zellenbereich erstellt, wodurch häufig viele Probleme gelöst werden können: = split (ArrayFormula (verketten (C3: O4 & ";")), ";") --- -
Ich werde
Ich habe eine Antwort gepostet, die das Ziel löst, ohne sich auf separate Spalten zu verlassen
consideRatio
202

Ich habe es gerade benutzt =COUNTIF(Range, "<>")und es zählte nicht leere Zellen für mich.

Mike
quelle
14
Leider zählt diese Formel auch Zellen mit Formeln von Leerergebnissen.
Dávid Veszelovszki
22
Ich hatte das gleiche Problem wie @ DávidVeszelovszki [Formeln wurden gezählt]. Ich löste mit=COUNTIF(Range,"?*")
shawnrad
Die Frage ist, wie die Zeilen in einem Bereich gezählt werden. Sie zählen die Zellen in einem Bereich?
AnnanFay
124
=counta(range) 
  • counta: "Gibt die Anzahl der Werte in einem Datensatz zurück."

    Hinweis: CountABetrachtet ""als Wert . Nur leere Zellen (drücken Sie in einer Zelle auf Löschen, um sie auszublenden) werden nicht gezählt.

    Google-Support: https://support.google.com/docs/answer/3093991

  • countblank: "Gibt die Anzahl der leeren Zellen in einem bestimmten Bereich zurück"

    Hinweis: CountBlankBerücksichtigt sowohl leere Zellen (drücken Sie Löschen, um eine Zelle zu leeren) als auch Zellen mit einer Formel, ""die als leere Zellen zurückgegeben wird.

    Google-Support: https://support.google.com/docs/answer/3093403

Wenn Sie einen Bereich haben, der Formeln enthält, die dazu führen "", können Sie Ihre Formel aus ändern

=counta(range)

zu:

=Counta(range) - Countblank(range)

BEARBEITEN: Die Funktion ist countblanknicht countblanks, letztere gibt einen Fehler aus.

Delta_zulu
quelle
5
Leider funktioniert dies nicht für Bereiche, die sowohl jungfräuliche als auch berechnete Leerzeichen enthalten. (Es subtrahiert die nicht gezählten jungfräulichen Leerzeichen vom Wert von COUNTA.)
Dávid Veszelovszki
3
Vielen Dank für die süßen Abstimmungen. Das OP erwähnte ausdrücklich, dass der Grund, warum er Leerzeichen hat, in der Formel wie = IF (1 = 2; ""; "") liegt, und ich erwähnte ausdrücklich: "Wenn Sie einen Bereich haben, der Formeln enthält, die Ergebnis in "" ... "
Delta_zulu
Die Frage ist, wie die Zeilen in einem Bereich gezählt werden. Sie zählen die Zellen in einem Bereich?
AnnanFay
38

Folgendes ist meiner Meinung nach die bisher beste Lösung:

=CountIf(ArrayFormula(range<>""),TRUE)

Hier ist der Grund in 3 einfachen Schritten

Schritt 1: Einfach wie Torte - Fügen Sie eine zusätzliche Spalte hinzu

Die Antwort von eniacAvenger liefert die richtige Lösung, ohne sich um =A1<>""Randfälle zu kümmern, da sie den richtigen Wahrheits- / Falschwert zu erhalten scheint, basierend darauf, wie wir intuitiv leere Zellen betrachten, entweder jungfräuliche Leerzeichen oder erstellte Leerzeichen.

Stellen Sie sich vor, wir haben diese Daten und möchten die Anzahl der Nicht-Leerzeichen 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   |

Wenn wir uns auf Spalte C verlassen würden , könnten wir die Anzahl der Werte in B wie folgt ermitteln:

=COUNTIF(C2:C6,True)

Schritt 2: Verwenden Sie FormulaArraydiese Option, um eine zusätzliche Spalte dynamisch zu erstellen

Der Kommentar von consideRatio ist jedoch gültig. Wenn Sie eine zusätzliche Spalte benötigen, können Sie häufig dasselbe Ziel mit einer erreichen, mit ArrayFormulader eine Spalte im Speicher erstellt werden kann, ohne Speicherplatz zu verbrauchen.

Wenn wir also C dynamisch erstellen möchten, können wir eine Array-Formel wie die folgende verwenden:

=ArrayFormula(B2:B6<>"")

Wenn wir es einfach in C2 einfügen, wird das vertikale Array mit einem einzigen Strich des Stifts erstellt:

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

Schritt 3: Zählen Sie die Werte in der dynamischen Spalte

Aber wenn das gelöst ist, brauchen wir die Spalte nicht mehr, um nur die Werte anzuzeigen.

ArrayFormulawird in den folgenden Bereich aufgelöst : {True,True,False,True,False}.
CountIfNimmt nur einen beliebigen Bereich auf und kann in diesem Fall die Anzahl der True-Werte zählen.

Wir können also CountIfdie Werte ArrayFormulawie folgt umschließen :

=CountIf(ArrayFormula(B2:B6<>""),TRUE)

Weiterführende Literatur

Die anderen Lösungen in diesem Thread sind entweder zu komplex oder schlagen in bestimmten Randfällen fehl, die ich in diesem Testblatt aufgezählt habe:

Google Spreadsheet - CountA Test - Demo

Warum CountAes so funktioniert, siehe meine Antwort hier

KyleMit
quelle
4
Diese Antwort ist die einzige vollständige Lösung: Es werden nur Zellen mit Text (einschließlich Leerzeichen), Zahlen und TRUE / FALSE-Werten erfolgreich gezählt, wobei generierte Leerzeichen, wirklich leere Zellen und Fehler (# N / A, #REF!, #VALUE) ausgeschlossen werden , #NAME?) . Es wird auch 0 zurückgeben, wo es keine Werte gibt
spacepickle
2
Ich war ein wenig verwirrt beim Lesen und habe versehentlich festgestellt, dass diese Formel auch funktioniert ... = CountIf (ArrayFormula (B2: B6 <> ""), TRUE) ... Bitte verstehen Sie mich nicht falsch, diese Antwort lautet das beste und sollte mehr positiv bewertet werden.
Twindham
2
@twindham stimmte zu, dass es im Hinblick auf die Erstellung der Blöcke dieser Antwort wahrscheinlich einfacher ist, jede logische Komponente intakt zu halten und neu anzuordnen ArrayFormula(...), um das Array von Werten innerhalb von zurückzugeben, CountIfwie Sie vorgeschlagen haben. Ich habe die Antwort und die Tabellenkalkulationsdemo aktualisiert. Sie werden beide das Gleiche tun, aber Sauberkeit ist neben Güte.
KyleMit
Die Frage ist, wie die Zeilen in einem Bereich gezählt werden. Sie zählen die nicht leeren Zellen in einer einzelnen Spalte? Kann Ihr Ansatz über mehrere Spalten hinweg funktionieren?
AnnanFay
19

Für mich keine der Antworten arbeitete für Bereiche , die sowohl jungfräuliche Zellen und Zellen enthalten , die auf einer Formel empty basieren (zB =IF(1=2;"";""))

Was es für mich gelöst hat, ist Folgendes:

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

Dávid Veszelovszki
quelle
Tolle Lösung für den Fall, dass eine Spalte Formulare enthält, die den Wert "" zurückgeben! Vielen Dank
user1561325
Leider sieht es so aus, als ob, wenn Filter()keine Elemente gefunden werden, zurückgegeben wird, #N/Awas COUNTA()als Element behandelt wird, und daher immer 1 zurückgegeben wird, selbst wenn die Anzahl Null sein sollte. Beispiel in Google Sheets
KyleMit
7
@ KyleMit Sie können das Problem der Nullzählung beseitigen, indem Sie dem Bereich einen konstanten Wert hinzufügen und 1 von der Zählung mit=COUNTA(filter({1;range},{1;range}<>"")) - 1
spacepickle
Die Frage ist, wie die Zeilen in einem Bereich gezählt werden. Sie zählen die Zellen in einem Bereich. Dieser Code wird unterbrochen, wenn Sie versuchen, ihn auf einen Zeilenbereich anzuwenden.
AnnanFay
9

Gelöst mit einer Lösung fand ich Googeln von Yogi Anand: https://productforums.google.com/d/msg/docs/3qsR2m-1Xx8/sSU6Z6NYLOcJ

Im folgenden Beispiel wird die Anzahl der nicht leeren Zeilen im Bereich A3: C gezählt. Denken Sie daran, beide Bereiche in der Formel mit Ihrem Interessenbereich zu aktualisieren.

=ArrayFormula(SUM(SIGN(MMULT(LEN(A3:C), TRANSPOSE(SIGN(COLUMN(A3:C)))))))

Vermeiden Sie auch zirkuläre Abhängigkeiten. Dies geschieht, wenn Sie beispielsweise die Anzahl der nicht leeren Zeilen in A: C zählen und diese Formel in die Spalte A oder C einfügen.

consideRatio
quelle
1
Ich habe eine viel sauberere Lösung gefunden und sie als neue Antwort veröffentlicht.
Dávid Veszelovszki
1
Die einzige Lösung, die die Frage beantwortet, besteht darin, die Anzahl der Zeilen mit nicht leeren Zellen und nicht die Anzahl der nicht leeren Zellen in einem Bereich zu zählen.
Kpym
7

Es ist Arbeit für mich:

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

Anzahl aller nicht leeren Zellen von F2 bis zum Ende der Spalte

nomnom
quelle
5

In Anbetracht der Reichweite würde A:Aich vorschlagen:

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

Das Problem ist, dass COUNTA genau um die Anzahl der Zellen mit Zeichenfolgen der Länge Null überzählt "".

Die Lösung besteht darin, genau diese Zellen zu zählen. Dies kann gefunden werden, indem nach allen Textzellen gesucht und alle Textzellen mit mindestens einem Zeichen subtrahiert werden

  • COUNTA (A: A): Zellen mit Wert, einschließlich, ""aber ohne wirklich leere Zellen
  • COUNTIF (A: A, "*"): Zellen, die als Text erkannt werden, einschließlich, ""aber ohne wirklich leere Zellen
  • COUNTIF (A: A, "? *"): Zellen, die als Text mit mindestens einem Zeichen erkannt werden

Dies bedeutet, dass der Wert COUNTIF(A:A,"*")-COUNTIF(A:A,"?*")die Anzahl der Textzellen abzüglich der Anzahl der Textzellen mit mindestens einem Zeichen sein sollte, dh die Anzahl der Zellen, die genau enthalten""

Spacepickle
quelle
Unter Verwendung von @ KyleMit Demoblatt fand ich, dass diese Formel immer noch überzählt, weil sie alle Zellen mit Fehlern enthält
spacepickle
Gibt es einen Unterschied zwischen einer Zelle, die eine Zeichenfolge mit der Länge Null enthält, und einer Zelle, die überhaupt nichts enthält? Dies ist es, was Menschen dazu bringt, Computern zu misstrauen. . . Sehen Sie, warum wir keine schönen Dinge haben können?
Cheeso
Die Frage ist, wie die Zeilen in einem Bereich gezählt werden. Sie zählen die Zellen in einem Bereich?
AnnanFay
5

Eine einfachere Lösung, die für mich funktioniert:

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

Es werden sowohl Zahlen als auch Zeichenfolgen, Datumsangaben usw. gezählt, die nicht leer sind

user300905
quelle
5
könnte in einer Form wie = COUNTIF (A: A, "<>")
Tom
Die Frage ist, wie die Zeilen in einem Bereich gezählt werden. Sie zählen die Zellen in einem Bereich?
AnnanFay
3

Soweit ich sehen kann, zählen die meisten Lösungen hier die Anzahl der nicht leeren Zellen und nicht die Anzahl der Zeilen mit nicht leeren Zellen.

Eine mögliche Lösung für den Bereich B3:E29ist zum Beispiel

=SUM(ArrayFormula(IF(B3:B29&C3:C29&D3:D29&E3:E29="";0;1)))

Hier wird ArrayFormula(IF(B3:B29&C3:C29&D3:D29&E3:E29="";0;1))eine Spalte von 0(wenn die Zeile leer ist) und 1(else) zurückgegeben.

Eine andere ist in der Antwort von consideRatio angegeben .

Kpym
quelle
2

Sie können eine benutzerdefinierte Funktion mit Apps Script (Extras> Skripteditor) definieren, die beispielsweise aufgerufen wird 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;
  }
}

Verwenden Sie es dann in einer Zelle wie dieser, =numNonEmptyRows(A23:C25)um die Anzahl der nicht leeren Zeilen im Bereich zu zählen A23:C25.

Kpym
quelle
2

So zählen Sie in Google Sheets die Anzahl der Zeilen, die mindestens eine nicht leere Zelle in einem zweidimensionalen Bereich enthalten :

=ARRAYFORMULA(
  SUM(
    N(
      MMULT(
        N(A1:C5<>""),
        TRANSPOSE(COLUMN(A1:C5)^0)
      )
      >0
    )
  )
)

Dabei ist A1: C5 der Bereich, den Sie auf nicht leere Zeilen prüfen.

Die Formel stammt von und wird im folgenden Artikel von EXCELXOR erläutert - https://excelxor.com/2015/03/30/counting-rows-where-at-least-one-condition-is-met/

Will Rice
quelle
1

Eine sehr flexible Möglichkeit, solche Dinge zu tun, ist die Verwendung von ARRAYFORMULA.

Stellen Sie sich als Beispiel vor, Sie möchten nicht leere Zeichenfolgen (Textfelder) zählen. Verwenden Sie diesen Code:

=ARRAYFORMULA(SUM(IF(Len(B3:B14)>0, 1, 0)))

Was hier passiert, ist, dass Sie mit "ArrayFormula" eine Reihe von Werten bearbeiten können. Mit der SUMME-Funktion geben Sie "ArrayFormula" an, um einen beliebigen Wert der Menge zu summieren. Die "If" -Klausel wird nur verwendet, um "leer" oder "nicht leer" zu überprüfen, 1 für nicht leer und 0 ansonsten. "Len" gibt die Länge der verschiedenen Textfelder zurück. Dort definieren Sie die Menge (den Bereich), die Sie überprüfen möchten. Schließlich summiert "ArrayFormula" 1 für jedes Feld innerhalb der Menge (Bereich), in dem "len" mehr als 0 zurückgibt.

Wenn Sie eine andere Bedingung überprüfen möchten, ändern Sie einfach das erste Argument der IF-Klausel.

Pablo
quelle