Đếm các hàng không có giá trị trống


128

Trong Bảng tính Google: Làm cách nào tôi có thể đếm các hàng của một khu vực nhất định có giá trị? Tất cả các gợi ý về điều này tôi tìm thấy cho đến nay đều dẫn đến các công thức đếm các hàng có nội dung không trống (bao gồm cả công thức), nhưng một ô có

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

được tính là tốt.

Giải pháp cho nhiệm vụ đơn giản này là gì?


6
CountA sẽ không làm việc cho bạn chứ? Cũng xem chủ đề SO này: stackoverflow.com/questions/12519073/
Ozair Kafray


Câu trả lời:


-11

Tạo một cột khác xác định xem ô được tham chiếu có trống không bằng cách sử dụng chức năng "CountBlank". Sau đó sử dụng đếm trên các giá trị được tạo trong cột "CountBlank" mới.


3
Tôi coi đây là một tuyên bố rõ ràng rằng không có giải pháp nào khác cho việc này. Cảm ơn rât nhiều.
Robbit

Khi bạn cần thêm một cột khác, bạn hầu như luôn có thể giải quyết nó bằng cách sử dụng một số công thức bổ sung như chứa một số concatinate / split / tham gia, v.v., hãy quay lại với bạn nếu tôi giải quyết nó.
consideRatio

Ví dụ: dòng sau tạo một hàng duy nhất trong phạm vi ô 2d, thường có thể giải quyết rất nhiều vấn đề: = split (ArrayFormula (concatenate (C3: O4 & ";")), ";") --- - tôi tiếp tục giải quyết vấn đề
consideRatio

Tôi đã đăng một câu trả lời giải quyết mục tiêu mà không cần dựa vào các cột riêng biệt
consideRatio

203

Tôi chỉ sử dụng =COUNTIF(Range, "<>")và nó đếm các ô không trống cho tôi.


14
Thật không may, công thức này cũng tính các ô với công thức kết quả trống.
Dávid Veszelovszki

23
Tôi gặp vấn đề tương tự như @ DávidVeszelovszki [công thức đã được tính]. Tôi đã giải quyết với=COUNTIF(Range,"?*")
shawnrad

Câu hỏi là hỏi làm thế nào để đếm các hàng trong một phạm vi. Bạn đang đếm các tế bào trong một phạm vi?
AnnanFay ngày

124
=counta(range) 
  • counta: "Trả về số lượng giá trị trong tập dữ liệu"

    Lưu ý: CountAcoi ""là một giá trị . Chỉ các ô trống (nhấn xóa trong một ô để bỏ trống) không được tính.

    Hỗ trợ của Google: https://support.google.com/docsrame/3093991

  • countblank: "Trả về số lượng ô trống trong một phạm vi nhất định"

    Lưu ý: CountBlankxem xét cả các tế bào trống (nhấn Delete để trống một tế bào) và các tế bào có một công thức rằng lợi nhuận ""trống tế bào.

    Hỗ trợ của Google: https://support.google.com/docsrame/3093403

Nếu bạn có một phạm vi bao gồm các công thức dẫn đến "", thì bạn có thể sửa đổi công thức của mình từ

=counta(range)

đến:

=Counta(range) - Countblank(range)

EDIT: chức năng là countblank, không countblanks, cái sau sẽ báo lỗi.


5
Thật không may, điều này không hoạt động cho các phạm vi bao gồm cả khoảng trống trinh nguyên và khoảng trống được tính toán. (Nó trừ đi những khoảng trống không được tính từ giá trị của COUNTA.)
Dávid Veszelovszki

3
Cảm ơn những lời khen ngợi ngọt ngào, OP đặc biệt đề cập rằng lý do anh ta có khoảng trống là vì công thức như = IF (1 = 2; ""; "") và tôi đặc biệt đề cập: "Nếu bạn có một phạm vi bao gồm các công thức bao gồm các công thức kết quả là "" ... "
Delta_zulu

Câu hỏi là hỏi làm thế nào để đếm các hàng trong một phạm vi. Bạn đang đếm các tế bào trong một phạm vi?
AnnanFay ngày

38

Đây là những gì tôi tin là giải pháp tốt nhất cho đến nay:

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

Đây là lý do tại sao trong 3 bước dễ dàng

Bước 1: Đơn giản như bánh - Thêm cột thêm

Câu trả lời của eniacAvenger sẽ mang lại giải pháp chính xác mà không phải lo lắng về các trường hợp cạnh vì =A1<>""dường như đi đến giá trị trung thực / sai lệch dựa trên cách chúng ta nghĩ một cách trực giác về các ô trống, hoặc các ô trống hoặc tạo khoảng trống.

Vì vậy, hãy tưởng tượng chúng tôi có dữ liệu này và chúng tôi muốn Đếm số khoảng trống trong 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   |

Nếu chúng tôi dựa vào Cột C , chúng tôi có thể nhận được số lượng giá trị trong B như thế này:

=COUNTIF(C2:C6,True)

Bước 2: Sử dụng FormulaArrayđể tự động tạo Cột bổ sung

Tuy nhiên, nhận xét của consideRatio là hợp lệ - nếu bạn cần thêm một cột, bạn thường có thể hoàn thành cùng một mục tiêu với mục tiêu ArrayFormulacó thể tạo một cột trong bộ nhớ mà không cần ăn hết dung lượng trang tính.

Vì vậy, nếu chúng ta muốn tạo C một cách linh hoạt, chúng ta có thể sử dụng một công thức mảng như thế này:

=ArrayFormula(B2:B6<>"")

Nếu chúng ta chỉ cần đặt nó vào C2, nó sẽ tạo ra mảng dọc chỉ bằng một nét bút:

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

Bước 3: Đếm các giá trị trong Cột động

Nhưng với điều đó đã được giải quyết, chúng ta không còn cần cột chỉ hiển thị các giá trị.

ArrayFormulasẽ giải quyết trong phạm vi sau : {True,True,False,True,False}.
CountIfchỉ mất trong bất kỳ phạm vi nào và trong trường hợp này có thể đếm số lượng giá trị True.

Vì vậy, chúng ta có thể bao CountIfquanh các giá trị được tạo ra ArrayFormulanhư thế này:

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

Đọc thêm

Các giải pháp khác trong luồng này quá phức tạp hoặc thất bại trong các trường hợp cạnh cụ thể mà tôi đã liệt kê trong bảng thử nghiệm này:

Bảng tính Google - Kiểm tra CountA - Bản trình diễn

Để biết lý do tại sao CountAhoạt động mạnh mẽ như vậy, xem câu trả lời của tôi ở đây


4
Câu trả lời này là giải pháp hoàn chỉnh duy nhất: Nó chỉ đếm thành công các ô có văn bản (bao gồm khoảng trắng), số và giá trị TRUE / FALSE trong khi loại trừ các khoảng trống được tạo, các ô thực sự trống và lỗi (# N / A, #REF!, #VALUE , #TÊN?) . Nó cũng sẽ trả về 0 khi không có giá trị
spacepickle

2
Tôi đã có một chút bối rối khi đọc nó và vô tình phát hiện ra rằng công thức này cũng hoạt động ... = Count If (ArrayFormula (B2: B6 <> ""), TRUE) ... Xin vui lòng, đừng hiểu sai ý tôi, câu trả lời này là tốt nhất, và nên được nâng cao hơn nữa.
twindham

2
@twindham, đồng ý, rằng về mặt xây dựng các khối của câu trả lời này, có thể dễ dàng giữ cho mỗi thành phần logic còn nguyên vẹn và sắp xếp lại ArrayFormula(...)để trả về mảng các giá trị bên trong CountIfnhư bạn đề xuất. Tôi đã cập nhật câu trả lời và bản demo Bảng tính. Cả hai sẽ làm điều tương tự, nhưng sự sạch sẽ bên cạnh sự tốt lành.
KyleMit

Câu hỏi là hỏi làm thế nào để đếm các hàng trong một phạm vi. Bạn đang đếm các ô không trống trong một cột? Cách tiếp cận của bạn có thể làm việc trên nhiều cột?
AnnanFay

19

Đối với tôi, không có câu trả lời nào hoạt động cho các phạm vi bao gồm cả các ô còn nguyên và các ô trống dựa trên một công thức (ví dụ =IF(1=2;"";""))

Điều đã giải quyết nó cho tôi là thế này:

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


Giải pháp tuyệt vời trong trường hợp nếu một cột chứa công thức trả về giá trị ""! Cảm ơn rất nhiều
user1561325

Thật không may, có vẻ như nếu Filter()không tìm thấy bất kỳ phần tử nào, nó sẽ trả về phần tử #N/Anào được COUNTA()coi là phần tử và vì vậy sẽ luôn trả về 1, ngay cả khi số đếm phải bằng 0. Ví dụ trong Google Sheets
KyleMit

7
@KyleMit Bạn có thể thoát khỏi vấn đề đếm không bằng cách thêm giá trị không đổi vào phạm vi và trừ 1 từ số đếm với=COUNTA(filter({1;range},{1;range}<>"")) - 1
spacepickle

Câu hỏi là hỏi làm thế nào để đếm các hàng trong một phạm vi. Bạn đang đếm các tế bào trong một phạm vi. Mã này bị hỏng nếu bạn cố gắng áp dụng nó cho một loạt các hàng.
AnnanFay

9

Đã giải quyết bằng cách sử dụng một giải pháp mà tôi đã tìm thấy bằng cách sử dụng googling bởi Yogi Anand: https://productforums.google.com/d/msg/docs/3qsR2m-1Xx8/sSU6Z6NYLOcJ

Ví dụ dưới đây đếm số lượng hàng không trống trong phạm vi A3: C, hãy nhớ cập nhật cả hai phạm vi trong công thức với phạm vi quan tâm của bạn.

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

Ngoài ra, hãy đảm bảo tránh phụ thuộc vòng tròn, điều này sẽ xảy ra nếu bạn lấy số lượng hàng không trống trong A: C và đặt công thức này vào cột A hoặc C.


1
Tìm thấy một giải pháp sạch hơn nhiều, tôi đăng nó như một câu trả lời mới.
Dávid Veszelovszki

1
Giải pháp duy nhất trả lời câu hỏi để đếm số lượng hàng có ô không trống bên trong và không đếm số ô không trống trong một phạm vi.
Kpym

7

Đó là công việc cho tôi:

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

Đếm tất cả các ô không trống từ F2 đến cuối cột


5

Đưa ra phạm vi A:A, Id đề xuất:

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

Vấn đề là COUNTA quá đếm bằng chính xác số lượng ô có chuỗi có độ dài bằng không "".

Giải pháp là tìm một số lượng chính xác các tế bào này. Điều này có thể được tìm thấy bằng cách tìm kiếm tất cả các ô văn bản và trừ tất cả các ô văn bản có ít nhất một ký tự

  • COUNTA (A: A): các ô có giá trị, bao gồm ""nhưng loại trừ các ô thực sự trống
  • COUNTIF (A: A, "*"): các ô được nhận dạng là văn bản, bao gồm ""nhưng loại trừ các ô thực sự trống
  • COUNTIF (A: A, "? *"): Các ô được nhận dạng là văn bản có ít nhất một ký tự

Điều này có nghĩa là giá trị COUNTIF(A:A,"*")-COUNTIF(A:A,"?*")phải là số lượng ô văn bản trừ đi số lượng ô văn bản có ít nhất một ký tự, tức là số lượng ô chứa chính xác""


Sử dụng bảng demo @KyleMit, tôi thấy công thức này vẫn vượt quá số lượng vì nó sẽ bao gồm bất kỳ ô nào có lỗi
spacepickle

Có sự khác biệt giữa một ô chứa chuỗi có độ dài bằng không và một ô không chứa gì cả? Đây là những gì làm cho mọi người không tin tưởng máy tính. . . Bạn có thấy tại sao chúng ta không thể có những thứ tốt đẹp không?
Cheeso

Câu hỏi là hỏi làm thế nào để đếm các hàng trong một phạm vi. Bạn đang đếm các tế bào trong một phạm vi?
AnnanFay

5

Một giải pháp đơn giản hơn phù hợp với tôi:

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

Nó đếm cả số, chuỗi, ngày, v.v. không trống


5
có thể được đơn giản hóa dưới dạng như = COUNTIF (A: A, "<>")
Tom

Câu hỏi là hỏi làm thế nào để đếm các hàng trong một phạm vi. Bạn đang đếm các tế bào trong một phạm vi?
AnnanFay

3

Theo như tôi có thể thấy, hầu hết các giải pháp ở đây đều đếm số lượng ô không trống và không phải là số hàng có ô không trống bên trong.

Một giải pháp khả thi cho phạm vi B3:E29là ví dụ

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

Ở đây ArrayFormula(IF(B3:B29&C3:C29&D3:D29&E3:E29="";0;1))trả về một cột 0(nếu hàng trống) và 1(khác).

Một số khác được đưa ra trong câu trả lời của consideRatio .


2

Bạn có thể xác định chức năng tùy chỉnh bằng Apps Script (Công cụ> Trình chỉnh sửa tập lệnh) được gọi là ví dụ 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;
  }
}

Và sau đó sử dụng nó trong một ô như thế này =numNonEmptyRows(A23:C25)để đếm số lượng hàng không trống trong phạm vi A23:C25;



1

Một cách rất linh hoạt để làm những việc đó là sử dụng ARRAYFORMULA.

Như một ví dụ tưởng tượng bạn muốn đếm các chuỗi không trống (trường văn bản), bạn có thể sử dụng mã này:

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

Điều xảy ra ở đây là "ArrayFormula" cho phép bạn vận hành trên một tập hợp các giá trị. Sử dụng hàm SUM, bạn chỉ ra "ArrayFormula" để tính tổng bất kỳ giá trị nào của tập hợp. Mệnh đề "Nếu" chỉ được sử dụng để kiểm tra "trống" hoặc "không trống", 1 cho không trống và 0 nếu không. "Len" trả về độ dài của các trường văn bản khác nhau, có nơi bạn xác định bộ (phạm vi) bạn muốn kiểm tra. Cuối cùng "ArrayFormula" sẽ tính tổng 1 cho mỗi trường bên trong tập hợp (phạm vi) trong đó "len" trả về hơn 0.

Nếu bạn muốn kiểm tra bất kỳ điều kiện nào khác, chỉ cần sửa đổi đối số đầu tiên của mệnh đề IF.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.