Policz wiersze bez pustej wartości

128

W arkuszu kalkulacyjnym Google: jak policzyć wiersze w danym obszarze, które mają wartość? Wszystkie wskazówki na ten temat, które znalazłem do tej pory, prowadzą do formuł, które liczą wiersze, które nie mają pustej treści (w tym formuły), ale komórkę z

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

jest również liczona.

Jakie jest rozwiązanie tego prostego zadania?

Robbit
źródło
6
Czy CountA nie działałby dla Ciebie? Zobacz także ten wątek SO: stackoverflow.com/questions/12519073/…
Ozair Kafray

Odpowiedzi:

-11

Utwórz kolejną kolumnę, która określa, czy komórka, której dotyczy odwołanie, jest pusta, używając funkcji „CountBlank”. Następnie użyj count na wartościach utworzonych w nowej kolumnie „CountBlank”.

eniacAvenger
źródło
3
Uważam to za jasne stwierdzenie, że nie ma innego rozwiązania tego problemu. Dziękuję Ci bardzo.
Robbit
Kiedy musisz dodać kolejną kolumnę, prawie zawsze możesz to rozwiązać, używając dodatkowych formuł, takich jak zawierające konkatinate / split / join itp., Skontaktuję się z tobą, jeśli to rozwiążę.
consideRatio
Na przykład poniższy wiersz tworzy pojedynczy wiersz z 2-wymiarowego zakresu komórek, co często może rozwiązać wiele problemów: = split (ArrayFormula (concatenate (C3: O4 & ";")), ";") --- -
będę
Opublikowałem odpowiedź, która rozwiązuje cel bez polegania na osobnych kolumnach
consideRatio
204

Właśnie użyłem =COUNTIF(Range, "<>")i policzyło dla mnie niepuste komórki.

Mikrofon
źródło
14
Niestety, ta formuła zlicza również komórki z formułami zawierającymi puste wyniki.
Dávid Veszelovszki
25
Miałem ten sam problem co @ DávidVeszelovszki [policzono formuły]. Rozwiązałem z=COUNTIF(Range,"?*")
shawnradem
Pytanie brzmi, jak policzyć wiersze w zakresie. Liczysz komórki w zakresie?
AnnanFay
125
=counta(range) 
  • counta: "Zwraca liczbę wartości w zbiorze danych"

    Uwaga: CountAuważa ""się za wartość . Tylko komórki, które są puste (naciśnij klawisz Delete w komórce, aby ją wyczyścić) nie są liczone.

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

  • countblank: "Zwraca liczbę pustych komórek w podanym zakresie"

    Uwaga: CountBlankuwzględnia zarówno puste komórki (naciśnij klawisz Delete, aby wyczyścić komórkę), jak i komórki, które mają formułę, która wraca ""jako puste komórki.

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

Jeśli masz zakres obejmujący formuły, których wynikiem jest "", możesz zmodyfikować formułę z

=counta(range)

do:

=Counta(range) - Countblank(range)

EDYCJA: funkcja jest countblank, nie countblanks, ta ostatnia spowoduje błąd.

Delta_zulu
źródło
5
Niestety, nie działa to w przypadku zakresów, które zawierają zarówno dziewicze, jak i obliczone spacje. (Odejmuje niezliczone dziewicze puste pola od wartości COUNTA.)
Dávid Veszelovszki
3
Dziękuję za słodkie głosy przeciw. OP konkretnie wspomniał, że powodem, dla którego ma spacje, jest formuła taka jak = JEŻELI (1 = 2; ""; ""), a ja konkretnie wspomniałem: „Jeśli masz zakres obejmujący formuły, wynik w "" ... "
Delta_zulu
Pytanie brzmi, jak policzyć wiersze w zakresie. Liczysz komórki w zakresie?
AnnanFay
39

Oto, co uważam za najlepsze do tej pory rozwiązanie:

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

Oto dlaczego w 3 prostych krokach

Krok 1: Proste jak ciasto - Dodaj dodatkową kolumnę

Odpowiedź przez eniacAvenger przyniesie właściwe rozwiązanie, bez martwienia się o przypadkach brzegowych jak =A1<>""zdaje się przybyć w odpowiednim truthy / wartość falsy oparciu o jak my intuicyjnie myśleć o pustych komórek, zarówno pierwotne półfabrykatów lub utworzone półfabrykatów.

Więc wyobraź sobie, że mamy te dane i chcemy, aby liczba elementów niebędących pustymi była w 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   |

Gdybyśmy polegali na kolumnie C , moglibyśmy uzyskać liczbę wartości w B w następujący sposób:

=COUNTIF(C2:C6,True)

Krok 2: Użyj, FormulaArrayaby dynamicznie utworzyć dodatkową kolumnę

Jednak komentarz consideRatio jest ważny - jeśli potrzebujesz dodatkowej kolumny, często możesz osiągnąć ten sam cel, dzięki ArrayFormulaczemu możesz utworzyć kolumnę w pamięci bez zajmowania miejsca w arkuszu.

Więc jeśli chcemy tworzyć C dynamicznie, możemy użyć formuły tablicowej takiej jak ta:

=ArrayFormula(B2:B6<>"")

Gdybyśmy po prostu umieścili go w C2, utworzyłoby pionową tablicę jednym pociągnięciem pióra:

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

Krok 3: Policz wartości w kolumnie dynamicznej

Ale po rozwiązaniu tego problemu nie potrzebujemy już kolumny do wyświetlania jedynie wartości.

ArrayFormularozwiąże z następującym zakresie: {True,True,False,True,False}.
CountIfpo prostu przyjmuje dowolny zakres iw tym przypadku może policzyć liczbę wartości True.

Więc możemy zawinąć CountIfwartości wytworzone w ArrayFormulaten sposób:

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

Dalsze czytanie

Inne rozwiązania w tym wątku są albo zbyt złożone, albo zawodzą w szczególnych przypadkach skrajnych, które wyliczyłem w tym arkuszu testowym:

Arkusz kalkulacyjny Google - CountA Test - Demo

Dlaczego CountAdziała tak dziwnie, zobacz moją odpowiedź tutaj

KyleMit
źródło
4
Ta odpowiedź jest jedynym kompletnym rozwiązaniem: pomyślnie liczy tylko komórki z tekstem (w tym spacją), liczbami i wartościami PRAWDA / FAŁSZ, jednocześnie wykluczając wygenerowane puste miejsca, naprawdę puste komórki i błędy (# N / A, #REF !, #VALUE , #NAZWA?) .
Zwróci
2
Trochę się pomyliłem czytając to i przypadkowo odkryłem, że ta formuła też działa ... = CountIf (ArrayFormula (B2: B6 <> ""), TRUE) ... Proszę, nie zrozum mnie źle, ta odpowiedź brzmi najlepszy i powinien być bardziej głosowany.
twindham
2
@twindham zgodził się, że jeśli chodzi o budowanie bloków tej odpowiedzi, prawdopodobnie łatwiej jest zachować każdy komponent logiczny w stanie nienaruszonym i zmienić kolejność, ArrayFormula(...)aby zwrócić tablicę wartości wewnątrz, CountIftak jak sugerowałeś. Zaktualizowałem odpowiedź i prezentację arkusza kalkulacyjnego. Oboje zrobią to samo, ale czystość jest równa dobroci.
KyleMit
Pytanie brzmi, jak policzyć wiersze w zakresie. Liczysz niepuste komórki w jednej kolumnie? Czy Twoje podejście może działać na wielu kolumnach?
AnnanFay
19

Dla mnie żadna z odpowiedzi nie działała dla zakresów obejmujących zarówno komórki pierwotne, jak i komórki puste na podstawie formuły (np. =IF(1=2;"";""))

Rozwiązało to dla mnie to:

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

Dávid Veszelovszki
źródło
Świetne rozwiązanie w przypadku, gdy kolumna zawiera formuala, które zwracają wartość „”!
Wielkie
Niestety, wygląda na to, że jeśli Filter()nie znajdzie żadnych elementów, zwróci, #N/Aktóry COUNTA()traktuje jako element, więc zawsze zwróci 1, nawet jeśli liczba powinna wynosić zero. Przykład w Arkuszach Google
KyleMit
7
@KyleMit Możesz pozbyć się problemu zliczania zera, dodając stałą wartość do zakresu i odejmując 1 od liczby za pomocą=COUNTA(filter({1;range},{1;range}<>"")) - 1
spacepickle Kwietnia
Pytanie brzmi, jak policzyć wiersze w zakresie. Liczysz komórki w zakresie. Ten kod zepsuje się, jeśli spróbujesz zastosować go do zakresu wierszy.
AnnanFay
9

Rozwiązany za pomocą rozwiązania, które znalazłem googling autorstwa Yogi Ananda: https://productforums.google.com/d/msg/docs/3qsR2m-1Xx8/sSU6Z6NYLOcJ

Poniższy przykład zlicza liczbę niepustych wierszy w zakresie A3: C, pamiętaj, aby zaktualizować oba zakresy w formule o interesujący Cię zakres.

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

Upewnij się również, że unikasz zależności cyklicznych, stanie się tak, jeśli na przykład policzysz liczbę niepustych wierszy w A: C i umieścisz tę formułę w kolumnie A lub C.

consideRatio
źródło
1
Znalazłem znacznie czystsze rozwiązanie, zamieściłem je jako nową odpowiedź.
Dávid Veszelovszki
1
Jedynym rozwiązaniem, które odpowiada na pytanie, jest policzenie liczby wierszy z niepustą komórką w środku, a nie policzenie liczby niepustych komórek w zakresie.
Kpym
7

To dla mnie praca:

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

Zliczanie wszystkich niepustych komórek od F2 do końca kolumny

nomnom
źródło
5

Biorąc pod uwagę zakres A:A, sugeruję:

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

Problem polega na tym, że COUNTA przekracza dokładnie liczbę komórek z ciągami o zerowej długości "".

Rozwiązaniem jest znalezienie liczby dokładnie tych komórek. Można to znaleźć, wyszukując wszystkie komórki tekstowe i odejmując wszystkie komórki tekstowe zawierające co najmniej jeden znak

  • COUNTA (A: A): komórki z wartością, w tym ""z prawdziwie pustymi komórkami
  • LICZ.JEŻELI (A: A, „*”): komórki rozpoznawane jako tekst, w tym, ""ale z wyłączeniem, prawdziwie pustych komórek
  • LICZ.JEŻELI (A: A, „? *”): Komórki rozpoznawane jako tekst z co najmniej jednym znakiem

Oznacza to, że wartością COUNTIF(A:A,"*")-COUNTIF(A:A,"?*")powinna być liczba komórek tekstowych pomniejszona o liczbę komórek tekstowych, które mają co najmniej jeden znak, tj. Liczba komórek zawierających dokładnie""

spacepickle
źródło
Korzystanie @KyleMit arkusz demo, znalazłem tę formułę jeszcze ponad liczy ponieważ będzie on zawierał żadnych komórek z błędami
spacepickle
Czy jest różnica między komórką, która zawiera ciąg o zerowej długości, a komórką, która w ogóle nic nie zawiera? To właśnie sprawia, że ​​ludzie nie ufają komputerom. . . Czy rozumiesz, dlaczego nie możemy mieć fajnych rzeczy?
Cheeso
Pytanie brzmi, jak policzyć wiersze w zakresie. Liczysz komórki w zakresie?
AnnanFay
5

Prostsze rozwiązanie, które działa dla mnie:

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

Zlicza zarówno liczby, ciągi znaków, daty itp., Które nie są puste

user300905
źródło
5
można uprościć w postaci takiej jak = LICZ.JEŻELI (A: A, "<>")
Tom
Pytanie brzmi, jak policzyć wiersze w zakresie. Liczysz komórki w zakresie?
AnnanFay
3

O ile widzę, większość rozwiązań tutaj liczy liczbę niepustych komórek, a nie liczbę wierszy z niepustą komórką w środku.

Jednym z możliwych rozwiązań dla zakresu B3:E29jest na przykład

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

Tutaj ArrayFormula(IF(B3:B29&C3:C29&D3:D29&E3:E29="";0;1))zwraca kolumnę 0(jeśli wiersz jest pusty) i 1(else).

Kolejny jest podany w odpowiedzi consideRatio .

Kpym
źródło
2

Możesz zdefiniować funkcję niestandardową za pomocą Apps Script (Narzędzia> Edytor skryptów) o nazwie na przykład 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;
  }
}

Następnie użyj go w komórce takiej jak ta, =numNonEmptyRows(A23:C25)aby policzyć liczbę niepustych wierszy w zakresie A23:C25;

Kpym
źródło
2

Aby policzyć w Arkuszach Google liczbę wierszy zawierających co najmniej jedną niepustą komórkę w dwuwymiarowym zakresie :

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

Gdzie A1: C5 to zakres, w którym sprawdzasz niepuste wiersze.

Formuła pochodzi z i jest wyjaśniona w następującym artykule z EXCELXOR - https://excelxor.com/2015/03/30/counting-rows-where-at-least-one-condition-is-met/

Will Rice
źródło
1

Bardzo elastycznym sposobem robienia tego typu rzeczy jest użycie ARRAYFORMULA.

Jako przykład wyobraź sobie, że chcesz policzyć niepuste ciągi (pola tekstowe), możesz użyć tego kodu:

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

To, co się tutaj dzieje, to fakt, że „ArrayFormula” pozwala operować na zbiorze wartości. Używając funkcji SUMA, wskazujesz "ArrayFormula", aby zsumować dowolną wartość zestawu. Klauzula „Jeśli” jest używana tylko do sprawdzania „pustych” lub „niepustych”, 1 oznacza niepuste, a 0 w przeciwnym razie. „Len” zwraca długość różnych pól tekstowych, w tym miejscu definiujesz zestaw (zakres), który chcesz sprawdzić. Na koniec „ArrayFormula” zsumuje 1 dla każdego pola wewnątrz zbioru (zakresu), w którym „len” zwraca więcej niż 0.

Jeśli chcesz sprawdzić inny warunek, po prostu zmodyfikuj pierwszy argument klauzuli IF.

Pablo
źródło