Hitung baris dengan nilai tidak kosong

128

Dalam Google Spreadsheet: Bagaimana saya bisa menghitung baris area tertentu yang memiliki nilai? Semua petunjuk tentang ini saya temukan hingga sekarang mengarah ke rumus yang menghitung baris yang tidak mengandung konten kosong (termasuk rumus), tetapi sel dengan

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

dihitung juga.

Apa solusi untuk tugas sederhana ini?

Robbit
sumber
6
Tidakkah CountA bekerja untuk Anda? Lihat juga utas SO ini: stackoverflow.com/questions/12519073/...
Ozair Kafray
Kemungkinan Duplikat dari google docs menghitung sel yang berisi teks apa pun
KyleMit
Kemungkinan duplikat dari sel Count yang berisi teks apa pun
Rubén

Jawaban:

-12

Buat kolom lain yang menentukan apakah sel yang direferensikan kosong menggunakan fungsi "CountBlank". Kemudian gunakan hitung pada nilai-nilai yang dibuat di kolom "CountBlank" yang baru.

eniacAvenger
sumber
3
Saya menganggap ini sebagai pernyataan yang jelas bahwa tidak ada solusi lain untuk ini. Terima kasih banyak.
Robbit
Ketika Anda perlu menambahkan kolom lain, Anda hampir selalu dapat menyelesaikannya dengan menggunakan beberapa formula tambahan seperti mengandung beberapa concatinate / split / join dll, Anda tidak akan dapat membalasnya jika saya menyelesaikannya.
consideRatio
Misalnya, baris berikut membuat satu baris tunggal dari rentang sel 2d, yang seringkali dapat memecahkan banyak masalah: = split (ArrayFormula (concatenate (C3: O4 & ";" ")),"; ") --- - sakit terus bekerja pada pemecahan masalah
consideRatio
Saya memposting jawaban yang memecahkan tujuan tanpa bergantung pada kolom terpisah
consideRatio
203

Saya hanya menggunakan =COUNTIF(Range, "<>")dan menghitung sel yang tidak kosong untuk saya.

Mike
sumber
14
Sayangnya, rumus ini juga menghitung sel dengan rumus hasil kosong.
Dávid Veszelovszki
23
Saya memiliki masalah yang sama dengan @ DávidVeszelovszki [rumus dihitung]. Saya diselesaikan dengan=COUNTIF(Range,"?*")
shawnrad
Pertanyaannya adalah bertanya bagaimana cara menghitung baris dalam suatu rentang. Anda menghitung sel dalam rentang?
AnnanFay
124
=counta(range) 
  • counta: "Mengembalikan hitungan jumlah nilai dalam dataset"

    Catatan: CountAanggap ""sebagai nilai . Hanya sel yang kosong (tekan delete dalam sel untuk mengosongkannya) tidak dihitung.

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

  • countblank: "Mengembalikan jumlah sel kosong dalam rentang yang diberikan"

    Catatan: CountBlankmenganggap sel kosong (tekan hapus untuk mengosongkan sel) dan sel yang memiliki rumus yang kembali ""menjadi sel kosong .

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

Jika Anda memiliki rentang yang menyertakan rumus yang menghasilkan "", maka Anda dapat mengubah rumus dari

=counta(range)

untuk:

=Counta(range) - Countblank(range)

EDIT: fungsi ini countblank, bukan countblanks, yang terakhir akan memberikan kesalahan.

Delta_zulu
sumber
5
Sayangnya, ini tidak berfungsi untuk rentang yang mencakup kosong perawan dan kosong dihitung. (Ini mengurangkan blanko perawan yang tidak dihitung dari nilai COUNTA.)
Dávid Veszelovszki
3
Terima kasih untuk downvotes yang manis, OP secara khusus menyebutkan bahwa alasan dia memiliki kekosongan adalah karena rumus seperti = IF (1 = 2; ""; ""), dan saya secara khusus menyebutkan: "Jika Anda memiliki rentang yang mencakup rumus yang menghasilkan "" ... "
Delta_zulu
Pertanyaannya adalah bertanya bagaimana cara menghitung baris dalam suatu rentang. Anda menghitung sel dalam rentang?
AnnanFay
38

Inilah yang saya yakini sebagai solusi terbaik sejauh ini:

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

Inilah sebabnya dalam 3 langkah mudah

Langkah 1: Sederhana Sebagai Pai - Tambahkan Kolom Ekstra

The jawaban dengan eniacAvenger akan menghasilkan solusi yang tepat tanpa khawatir tentang kasus tepi sebagai =A1<>""tampaknya tiba di truthy / nilai falsy benar didasarkan pada bagaimana kita secara intuitif berpikir sel kosong, baik kosong perawan atau dibuat kosong.

Jadi bayangkan kita memiliki data ini dan kami ingin Hitungan kosong di 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   |

Jika kami mengandalkan Kolom C , kami bisa mendapatkan jumlah nilai dalam B seperti ini:

=COUNTIF(C2:C6,True)

Langkah 2: Gunakan FormulaArrayuntuk secara dinamis membuat Kolom Ekstra

Namun, komentar consideRatio adalah komentar yang valid - jika Anda membutuhkan kolom tambahan, Anda sering dapat mencapai tujuan yang sama dengan ArrayFormulayang dapat membuat kolom dalam memori tanpa menghabiskan ruang lembar.

Jadi jika kita ingin membuat C secara dinamis, kita bisa menggunakan rumus array seperti ini:

=ArrayFormula(B2:B6<>"")

Jika kita cukup meletakkannya di C2, itu akan membuat array vertikal dengan satu goresan pena:

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

Langkah 3: Hitung Nilai dalam Kolom Dinamis

Tetapi dengan itu diselesaikan, kita tidak perlu lagi kolom untuk hanya menampilkan nilai.

ArrayFormulaakan memutuskan untuk berbagai berikut: {True,True,False,True,False}.
CountIfhanya mengambil dalam kisaran apa pun dan dalam hal ini dapat menghitung jumlah nilai True.

Jadi kita bisa membungkus CountIfnilai-nilai yang dihasilkan oleh ArrayFormulaseperti ini:

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

Bacaan lebih lanjut

Solusi lain di utas ini terlalu rumit, atau gagal dalam kasus tepi tertentu yang telah saya sebutkan dalam lembar tes ini:

Google Spreadsheet - Uji CountA - Demo

Untuk alasan mengapa CountAbekerja dengan cara yang payah seperti itu, lihat jawaban saya di sini

KyleMit
sumber
4
Jawaban ini adalah satu-satunya solusi lengkap: Berhasil menghitung hanya sel dengan teks (termasuk spasi), angka, dan nilai TRUE / FALSE sementara tidak termasuk menghasilkan kosong, sel benar-benar kosong, dan kesalahan (# N / A, #REF !, #VALUE , #NAME?). Ini juga akan mengembalikan 0 di mana tidak ada nilai
spacepickle
2
Saya agak bingung membaca ini, dan secara tidak sengaja menemukan bahwa rumus ini juga berfungsi ... = CountIf (ArrayFormula (B2: B6 <> ""), TRUE) ... Tolong, jangan salah paham, jawaban ini adalah yang terbaik, dan harus lebih ditingkatkan.
twindham
2
@twindham, setuju, bahwa dalam hal membangun blok jawaban ini yang mungkin lebih mudah untuk menjaga setiap komponen logis tetap utuh dan menyusun ulang ArrayFormula(...)untuk mengembalikan array nilai di dalamnya CountIfseperti yang Anda sarankan. Saya telah memperbarui jawabannya dan demo Spreadsheet. Mereka berdua akan melakukan hal yang sama, tetapi kebersihan ada di sebelahnya.
KyleMit
Pertanyaannya adalah bertanya bagaimana cara menghitung baris dalam suatu rentang. Anda menghitung sel non-kosong dalam satu kolom? Bisakah pendekatan Anda bekerja pada banyak kolom?
AnnanFay
19

Bagi saya, tidak ada jawaban yang berfungsi untuk rentang yang mencakup sel perawan dan sel yang kosong berdasarkan rumus (misalnya =IF(1=2;"";""))

Yang memecahkannya bagi saya adalah ini:

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

Dávid Veszelovszki
sumber
Solusi hebat jika kolomb berisi formual yang mengembalikan nilai ""! Terima kasih banyak
user1561325
Sayangnya, sepertinya jika Filter()tidak menemukan elemen, itu akan mengembalikan #N/Ayang COUNTA()memperlakukan sebagai elemen dan akan selalu mengembalikan 1, bahkan jika hitungnya harus nol. Contoh di Google Sheets
KyleMit
7
@KyleMit Anda dapat menyingkirkan masalah jumlah nol dengan menambahkan nilai konstan ke kisaran dan mengurangi 1 dari jumlah dengan=COUNTA(filter({1;range},{1;range}<>"")) - 1
spacepickle
Pertanyaannya adalah bertanya bagaimana cara menghitung baris dalam suatu rentang. Anda menghitung sel dalam rentang. Kode ini rusak jika Anda mencoba menerapkannya ke berbagai baris.
AnnanFay
9

Dipecahkan menggunakan solusi yang saya temukan googling oleh Yogi Anand: https://productforums.google.com/d/msg/docs/3qsR2m-1Xx8/sSU6Z6NYLOcJ

Contoh di bawah ini menghitung jumlah baris tidak kosong dalam rentang A3: C, ingatlah untuk memperbarui kedua rentang dalam rumus dengan rentang minat Anda.

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

Pastikan juga untuk menghindari dependensi melingkar, itu akan terjadi jika Anda misalnya menghitung jumlah baris yang tidak kosong di A: C dan tempatkan rumus ini di kolom A atau C.

consideRatio
sumber
1
Menemukan solusi yang jauh lebih bersih, saya mempostingnya sebagai jawaban baru.
Dávid Veszelovszki
1
Satu-satunya solusi yang menjawab pertanyaan untuk menghitung jumlah baris dengan sel yang tidak kosong di dalamnya, dan tidak menghitung jumlah sel yang tidak kosong dalam rentang.
Kpym
7

Ini bekerja untuk saya:

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

Hitung semua sel yang tidak kosong dari F2 hingga akhir kolom

nomnom
sumber
5

Dengan kisaran tersebut A:A, Id menyarankan:

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

Masalahnya adalah COUNTA menghitung secara persis dengan jumlah sel dengan string nol panjang "".

Solusinya adalah menemukan jumlah sel-sel ini secara tepat. Ini dapat ditemukan dengan mencari semua sel teks dan mengurangi semua sel teks dengan setidaknya satu karakter

  • COUNTA (A: A): sel dengan nilai, termasuk ""tetapi tidak termasuk sel yang benar-benar kosong
  • COUNTIF (A: A, "*"): sel yang dikenali sebagai teks, termasuk ""tetapi tidak termasuk sel yang benar-benar kosong
  • COUNTIF (A: A, "? *"): Sel dikenali sebagai teks dengan setidaknya satu karakter

Ini berarti bahwa nilainya COUNTIF(A:A,"*")-COUNTIF(A:A,"?*")harus berupa jumlah sel teks dikurangi jumlah sel teks yang memiliki setidaknya satu karakter, yaitu jumlah sel yang mengandung""

spacepickle
sumber
Menggunakan lembar demo @KyleMit, saya menemukan rumus ini masih terlalu penting karena akan menyertakan sel dengan kesalahan
spacepickle
Ada perbedaan antara sel yang berisi string panjang nol dan sel yang tidak mengandung apa pun? Inilah yang membuat orang tidak percaya komputer. . . Apakah Anda mengerti mengapa kami tidak dapat memiliki hal-hal yang menyenangkan?
Cheeso
Pertanyaannya adalah bertanya bagaimana cara menghitung baris dalam suatu rentang. Anda menghitung sel dalam rentang?
AnnanFay
5

Solusi sederhana yang bekerja untuk saya:

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

Itu menghitung angka, string, tanggal, dll yang tidak kosong

pengguna300905
sumber
5
dapat disederhanakan dalam bentuk seperti = COUNTIF (A: A, "<>")
Tom
Pertanyaannya adalah bertanya bagaimana cara menghitung baris dalam suatu rentang. Anda menghitung sel dalam rentang?
AnnanFay
3

Sejauh yang saya bisa lihat, sebagian besar solusi di sini menghitung jumlah sel yang tidak kosong, dan bukan jumlah baris dengan sel yang tidak kosong di dalamnya.

Salah satu solusi yang mungkin untuk rentang B3:E29tersebut misalnya

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

Di sini ArrayFormula(IF(B3:B29&C3:C29&D3:D29&E3:E29="";0;1))mengembalikan kolom 0(jika baris kosong) dan 1(lain).

Satu lagi diberikan dalam jawaban consideRatio .

Kpym
sumber
2

Anda dapat mendefinisikan fungsi khusus menggunakan Apps Script (Tools> Editor Script) yang dipanggil misalnya 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;
  }
}

Dan kemudian menggunakannya dalam sel seperti ini =numNonEmptyRows(A23:C25)untuk menghitung jumlah baris yang tidak kosong dalam rentang A23:C25;

Kpym
sumber
2

Di Google Sheets, untuk menghitung jumlah baris yang mengandung setidaknya satu sel tidak kosong dalam rentang dua dimensi :

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

Di mana A1: C5 adalah rentang yang Anda periksa untuk baris yang tidak kosong.

Rumus ini berasal dari, dan dijelaskan dalam artikel berikut dari EXCELXOR - https://excelxor.com/2015/03/30/counting-rows-where-at-least-one-condition-is-met/

Will Rice
sumber
1

Cara yang sangat fleksibel untuk melakukan hal-hal semacam itu adalah menggunakan ARRAYFORMULA.

Sebagai contoh bayangkan Anda ingin menghitung string yang tidak kosong (bidang teks) Anda dapat menggunakan kode ini:

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

Apa yang terjadi di sini adalah "ArrayFormula" memungkinkan Anda beroperasi di atas serangkaian nilai. Menggunakan fungsi SUM Anda menunjukkan "ArrayFormula" untuk menjumlahkan nilai set. Klausa "Jika" hanya digunakan untuk memeriksa "kosong" atau "tidak kosong", 1 untuk tidak kosong dan 0 sebaliknya. "Len" mengembalikan panjang bidang teks yang berbeda, ada tempat Anda menentukan set (rentang) yang ingin Anda periksa. Akhirnya "ArrayFormula" akan menjumlahkan 1 untuk setiap bidang di dalam set (kisaran) di mana "len" mengembalikan lebih dari 0.

Jika Anda ingin memeriksa kondisi lain, cukup modifikasi argumen pertama klausa IF.

Pablo
sumber