นับจำนวนแถวด้วยค่าที่ไม่ว่าง


128

ในสเปรดชีตของ Google: ฉันจะนับแถวของพื้นที่ที่กำหนดที่มีค่าได้อย่างไร คำแนะนำทั้งหมดเกี่ยวกับเรื่องนี้ฉันพบจนถึงตอนนี้นำไปสู่สูตรที่นับแถวที่มีเนื้อหาไม่ว่างเปล่า (รวมถึงสูตร) ​​แต่เป็นเซลล์ที่มี

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

ถูกนับเช่นกัน

คำตอบสำหรับงานง่าย ๆ นี้คืออะไร?


6
CountA ไม่เหมาะกับคุณใช่ไหม ดูหัวข้อนี้เช่นกัน: stackoverflow.com/questions/12519073/…
Ozair Kafray


คำตอบ:


-12

สร้างคอลัมน์อื่นที่กำหนดว่าเซลล์ที่อ้างอิงนั้นว่างเปล่าโดยใช้ฟังก์ชัน "CountBlank" จากนั้นใช้การนับค่าที่สร้างในคอลัมน์ "CountBlank" ใหม่


3
ฉันถือว่านี่เป็นคำแถลงที่ชัดเจนว่าไม่มีทางแก้ปัญหาอื่น ๆ ขอบคุณมาก.
Robbit

เมื่อคุณต้องการเพิ่มอีกคอลัมน์คุณสามารถแก้ไขได้เกือบทุกครั้งโดยใช้สูตรพิเศษบางอย่างเช่นมี concatinate / split / join ฯลฯ ไม่สามารถติดต่อกลับได้ถ้าฉันแก้มัน
consideRatio

ตัวอย่างเช่นบรรทัดต่อไปนี้สร้างหนึ่งแถวเดียวจากช่วงเซลล์ 2d ซึ่งมักจะสามารถแก้ไขปัญหาได้มากมาย: = split (ArrayFormula (concatenate (C3: O4 & ";")), ";") --- - พยายามแก้ปัญหาต่อไป
consideRatio

ฉันโพสต์คำตอบที่แก้ปัญหาเป้าหมายโดยไม่ต้องพึ่งพาคอลัมน์แยกกัน
consideRatio

203

ฉันใช้=COUNTIF(Range, "<>")แล้วมันนับเซลล์ที่ไม่ว่างเปล่าสำหรับฉัน


14
น่าเสียดายที่สูตรนี้นับเซลล์ด้วยสูตรของผลลัพธ์ว่างด้วย
Dávid Veszelovszki

23
ฉันมีปัญหาเช่นเดียวกับ @ DávidVeszelovszki [สูตรถูกนับ] ฉันแก้ไขด้วย=COUNTIF(Range,"?*")
shawnrad

คำถามกำลังถามถึงวิธีการนับแถวในช่วง คุณกำลังนับเซลล์ในช่วงหรือไม่?
AnnanFay

124
=counta(range) 
  • counta: "ส่งคืนการนับจำนวนของค่าในชุดข้อมูล"

    หมายเหตุ: การCountAพิจารณา""จะเป็นค่า เฉพาะเซลล์ที่ว่างเปล่า (กดลบในเซลล์เพื่อเว้นว่าง) จะไม่ถูกนับ

    การสนับสนุนของ Google: https://support.google.com/docs/answer/3093991

  • countblank: "ส่งคืนจำนวนเซลล์ว่างในช่วงที่กำหนด"

    หมายเหตุ: CountBlankพิจารณาทั้งเซลล์ว่าง (กดลบเพื่อว่างเซลล์) และเซลล์ที่มีสูตรที่ส่งคืน""เป็นเซลล์ว่าง

    การสนับสนุนของ Google: https://support.google.com/docs/answer/3093403

หากคุณมีช่วงที่มีสูตรที่ส่งผล""ให้คุณสามารถแก้ไขสูตรได้

=counta(range)

ถึง:

=Counta(range) - Countblank(range)

แก้ไข: ฟังก์ชั่นคือcountblankไม่countblanksหลังจะให้ข้อผิดพลาด


5
ขออภัยนี่ไม่สามารถใช้ได้กับช่วงที่มีทั้งช่องว่างบริสุทธิ์และช่องว่างจากการคำนวณ (มันลบช่องว่างบริสุทธิ์ที่ไม่นับรวมจากค่าของ COUNTA)
Dávid Veszelovszki

3
ขอบคุณสำหรับ downvote หวาน OP ระบุไว้โดยเฉพาะว่าเหตุผลที่เขามีช่องว่างเป็นเพราะสูตรเช่น = IF (1 = 2; ""; "") และฉันกล่าวถึงโดยเฉพาะ: "ถ้าคุณมีช่วงที่มีสูตรที่ ส่งผลให้ "" ... "
Delta_zulu

คำถามกำลังถามถึงวิธีการนับแถวในช่วง คุณกำลังนับเซลล์ในช่วงหรือไม่?
AnnanFay

38

นี่คือสิ่งที่ฉันเชื่อว่าเป็นทางออกที่ดีที่สุด:

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

นี่คือเหตุผลใน 3 ขั้นตอนง่าย ๆ

ขั้นตอนที่ 1: Simple As Pie - เพิ่มคอลัมน์พิเศษ

คำตอบโดย eniacAvengerจะทำให้การแก้ปัญหาที่ถูกต้องโดยไม่ต้องกังวลเกี่ยวกับกรณีขอบเป็น=A1<>""ดูเหมือนว่าจะมาถึงที่ที่ถูกต้อง truthy / ค่า falsy ขึ้นอยู่กับวิธีการที่เราคิดว่าสังหรณ์ใจของเซลล์ว่างเปล่าทั้งช่องว่างบริสุทธิ์หรือช่องว่างที่สร้างขึ้น

ลองจินตนาการว่าเรามีข้อมูลนี้และเราต้องการจำนวนนับไม่ว่างใน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   |

ถ้าเราอาศัยคอลัมน์ Cเราสามารถได้ค่าใน B ดังนี้:

=COUNTIF(C2:C6,True)

ขั้นตอนที่ 2: ใช้FormulaArrayเพื่อสร้างคอลัมน์พิเศษแบบไดนามิก

อย่างไรก็ตามความคิดเห็นของ consideRatioเป็นสิ่งที่ถูกต้องหากคุณต้องการคอลัมน์พิเศษคุณสามารถบรรลุเป้าหมายเดียวกันได้โดยArrayFormulaที่สามารถสร้างคอลัมน์ในหน่วยความจำได้โดยไม่ต้องกินพื้นที่ในแผ่นงาน

ดังนั้นถ้าเราต้องการสร้าง C แบบไดนามิกเราสามารถใช้สูตรอาเรย์เช่นนี้:

=ArrayFormula(B2:B6<>"")

หากเราเพียงวางไว้ใน C2 มันจะสร้างอาร์เรย์แนวตั้งด้วยปากกาเส้นเดียว:

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

ขั้นตอนที่ 3: นับค่าในคอลัมน์ไดนามิก

แต่เมื่อแก้ไขแล้วเราไม่ต้องการให้คอลัมน์แสดงเฉพาะค่าอีกต่อไป

ArrayFormula{True,True,False,True,False}จะแก้ปัญหาในช่วงต่อไปนี้:
CountIfใช้ในช่วงใดก็ได้และในกรณีนี้สามารถนับจำนวนค่า True ได้

ดังนั้นเราสามารถสรุปCountIfค่าที่สร้างโดยArrayFormulaแบบนี้:

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

อ่านเพิ่มเติม

โซลูชันอื่น ๆ ในชุดข้อความนี้มีความซับซ้อนมากเกินไปหรือล้มเหลวในกรณีขอบเฉพาะที่ฉันระบุในแผ่นทดสอบนี้:

Google Spreadsheet - การทดสอบ CountA - การสาธิต

สำหรับวิธีการCountAทำงานที่ไม่ค่อยมีประสิทธิภาพให้ดูคำตอบของฉันที่นี่


4
คำตอบนี้เป็นคำตอบที่สมบูรณ์เพียงข้อเดียว: นับจำนวนเซลล์ที่มีข้อความ (รวมถึงช่องว่าง) ตัวเลขและค่า TRUE / FALSE ได้สำเร็จในขณะที่ไม่รวมช่องว่างที่สร้างขึ้นเซลล์ว่างเปล่าอย่างแท้จริงและข้อผิดพลาด (# N / A, #REF !, #VALUE , #NAME?) มันจะส่งคืนค่า 0 ซึ่งไม่มีค่าใด ๆ ด้วย
spacepickle

2
ฉันสับสนเล็กน้อยในการอ่านนี้และค้นพบโดยบังเอิญว่าสูตรนี้ใช้ได้เช่นกัน ... = CountIf (ArrayFormula (B2: B6 <> ""), TRUE) ... ได้โปรดอย่าเข้าใจฉันผิดคำตอบนี้คือ สิ่งที่ดีที่สุดและควรได้รับการสนับสนุนมากขึ้น
twindham

2
@twindham เห็นด้วยว่าในแง่ของการสร้างบล็อกของคำตอบนี้มันคงง่ายกว่าที่จะทำให้แต่ละองค์ประกอบทางตรรกะยังคงอยู่และจัดลำดับใหม่ArrayFormula(...)เพื่อส่งกลับอาร์เรย์ของค่าภายในCountIfตามที่คุณแนะนำ ฉันได้อัปเดตคำตอบและการสาธิตสเปรดชีตแล้ว พวกเขาทั้งสองจะทำสิ่งเดียวกัน แต่ความสะอาดอยู่ถัดจากความดี
KyleMit

คำถามกำลังถามถึงวิธีการนับแถวในช่วง คุณกำลังนับเซลล์ที่ไม่ว่างในคอลัมน์เดียวหรือไม่ วิธีการของคุณสามารถใช้ได้กับหลายคอลัมน์หรือไม่
AnnanFay

19

สำหรับฉันไม่มีคำตอบใดที่ทำงานสำหรับช่วงที่มีทั้งเซลล์บริสุทธิ์และเซลล์ที่ว่างเปล่าตามสูตร (เช่น=IF(1=2;"";""))

สิ่งที่แก้ไขให้ฉันคือ:

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


วิธีแก้ปัญหาที่ยอดเยี่ยมในกรณีที่คอลัมน์มีฟอร์มที่ส่งคืนค่า "" ขอบคุณมาก
user1561325

น่าเสียดายที่ดูเหมือนว่าหากFilter()ไม่พบองค์ประกอบใด ๆ เลยก็จะส่งคืน#N/Aซึ่งCOUNTA()ถือว่าเป็นองค์ประกอบและจะส่งคืน 1 เสมอแม้ว่าการนับควรเป็นศูนย์ ตัวอย่างใน Google ชีต
KyleMit

7
@KyleMit คุณสามารถกำจัดปัญหาการนับเป็นศูนย์ได้โดยการเพิ่มค่าคงที่ให้กับช่วงและลบ 1 จากการนับด้วย=COUNTA(filter({1;range},{1;range}<>"")) - 1
spacepickle

คำถามกำลังถามถึงวิธีการนับแถวในช่วง คุณกำลังนับเซลล์ในช่วง รหัสนี้จะแบ่งถ้าคุณพยายามที่จะนำไปใช้กับช่วงของแถว
AnnanFay

9

แก้ไขโดยใช้วิธีแก้ปัญหาที่ฉันพบ googling โดย Yogi Anand: https://productforums.google.com/d/msg/docs/3qsR2m-1Xx8/sSU6Z6NYLOcJ

ตัวอย่างด้านล่างนับจำนวนแถวที่ไม่ว่างเปล่าในช่วง A3: C อย่าลืมอัปเดตทั้งสองช่วงในสูตรด้วยช่วงที่คุณสนใจ

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

นอกจากนี้ตรวจสอบให้แน่ใจเพื่อหลีกเลี่ยงการพึ่งพาแบบวงกลมมันจะเกิดขึ้นหากคุณนับจำนวนแถวที่ไม่ว่างใน A: C และวางสูตรนี้ในคอลัมน์ A หรือ C


1
พบโซลูชันที่สะอาดกว่านี้ฉันโพสต์ไว้เป็นคำตอบใหม่
Dávid Veszelovszki

1
ทางออกเดียวที่ตอบคำถามเพื่อนับจำนวนแถวที่ไม่มีเซลล์ว่างภายในและไม่นับจำนวนเซลล์ที่ไม่ว่างเปล่าในช่วง
Kpym

7

มันใช้งานได้สำหรับฉัน:

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

นับจำนวนเซลล์ที่ไม่ว่างทั้งหมดจากF2ถึงจุดสิ้นสุดของคอลัมน์


5

เมื่อได้รับช่วงA:Aรหัสแนะนำ:

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

ปัญหาคือ COUNTA ""มากกว่านับว่าโดยจำนวนของเซลล์กับศูนย์สายยาว

ทางออกคือการหาจำนวนเซลล์เหล่านี้อย่างแน่นอน สามารถพบได้โดยค้นหาเซลล์ข้อความทั้งหมดและลบเซลล์ข้อความทั้งหมดด้วยอักขระอย่างน้อยหนึ่งตัว

  • COUNTA (A: A): เซลล์ที่มีค่ารวมถึง ""แต่ไม่รวมเซลล์ที่ว่างเปล่าอย่างแท้จริง
  • COUNTIF (A: A, "*"): เซลล์ที่รับรู้เป็นข้อความรวมถึง""แต่ไม่รวมเซลล์ว่างเปล่าอย่างแท้จริง
  • COUNTIF (A: A, "? *"): เซลล์ที่รู้จักเป็นข้อความที่มีอักขระอย่างน้อยหนึ่งตัว

ซึ่งหมายความว่าค่าCOUNTIF(A:A,"*")-COUNTIF(A:A,"?*")ควรเป็นจำนวนเซลล์ข้อความลบด้วยจำนวนเซลล์ข้อความที่มีอักขระอย่างน้อยหนึ่งตัวเช่นจำนวนเซลล์ที่มีทั้งหมด""


ใช้แผ่นตัวอย่าง @KyleMit ฉันพบว่าสูตรนี้ยังคงมีค่าเกินนับเพราะจะรวมเซลล์ใด ๆ ที่มีข้อผิดพลาด
ซคราฟต์เคิล

มีความแตกต่างระหว่างเซลล์ที่มีสตริงความยาวเป็นศูนย์และเซลล์ที่ไม่มีอะไรเลยเหรอ? นี่คือสิ่งที่ทำให้คนไม่ไว้วางใจคอมพิวเตอร์ . . คุณเห็นไหมว่าทำไมเราถึงมีสิ่งดีๆไม่ได้?
Cheeso

คำถามกำลังถามถึงวิธีการนับแถวในช่วง คุณกำลังนับเซลล์ในช่วงหรือไม่?
AnnanFay

5

ทางออกที่ง่ายกว่าที่เหมาะกับฉัน:

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

มันนับทั้งตัวเลขสตริงวันที่และอื่น ๆ ที่ไม่ว่างเปล่า


5
สามารถทำให้ง่ายขึ้นในรูปแบบเช่น = COUNTIF (A: A, "<>")
Tom

คำถามกำลังถามถึงวิธีการนับแถวในช่วง คุณกำลังนับเซลล์ในช่วงหรือไม่?
AnnanFay

3

เท่าที่ฉันเห็นการแก้ปัญหาส่วนใหญ่ที่นี่นับจำนวนเซลล์ที่ไม่ว่างเปล่าและไม่ใช่จำนวนแถวที่มีเซลล์ที่ไม่ใช่เซลล์ว่างเปล่า

ทางออกหนึ่งที่เป็นไปได้สำหรับช่วงB3:E29นั้นเป็นตัวอย่าง

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

ที่นี่ArrayFormula(IF(B3:B29&C3:C29&D3:D29&E3:E29="";0;1))ส่งคืนคอลัมน์ของ0(หากแถวว่างเปล่า) และ1(อื่น ๆ )

อีกคนหนึ่งจะได้รับในคำตอบของ consideRatio


2

คุณสามารถกำหนดฟังก์ชั่นที่กำหนดเองโดยใช้ Apps Script (เครื่องมือ> ตัวแก้ไขสคริปต์) ที่เรียกว่า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;
  }
}

แล้วใช้มันในเซลล์เช่นนี้=numNonEmptyRows(A23:C25)จะนับจำนวนแถวที่ว่างเปล่าที่ไม่ได้อยู่ในช่วงที่A23:C25;


2

ใน Google ชีตเพื่อนับจำนวนแถวที่มีเซลล์ไม่ว่างอย่างน้อยหนึ่งเซลล์ภายในช่วงสองมิติ :

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

โดยที่ A1: C5 เป็นช่วงที่คุณกำลังตรวจสอบแถวที่ไม่ว่างเปล่า

สูตรมาจากและอธิบายไว้ในบทความต่อไปนี้จาก EXCELXOR - https://excelxor.com/2015/03/30/counting-rows-where-at-least-one-condition-is-met/


1

วิธีที่ยืดหยุ่นมากในการทำสิ่งนั้นคือการใช้ ARRAYFORMULA

ตัวอย่างเช่นสมมติว่าคุณต้องการนับจำนวนสตริงที่ไม่ว่างเปล่า (ฟิลด์ข้อความ) คุณสามารถใช้รหัสนี้:

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

สิ่งที่เกิดขึ้นที่นี่คือ "ArrayFormula" ช่วยให้คุณดำเนินการผ่านชุดของค่า การใช้ฟังก์ชัน SUM คุณระบุว่า "ArrayFormula" เพื่อรวมค่าใด ๆ ของชุด ประโยค "If" ใช้เพื่อตรวจสอบเฉพาะ "empty" หรือ "not empty", 1 สำหรับไม่ว่างและ 0 เป็นอย่างอื่น "Len" ส่งคืนความยาวของฟิลด์ข้อความที่แตกต่างกันซึ่งเป็นที่ที่คุณกำหนดชุด (ช่วง) ที่คุณต้องการตรวจสอบ ในที่สุด "ArrayFormula" จะรวม 1 สำหรับแต่ละฟิลด์ภายในชุด (ช่วง) ที่ "len" ส่งคืนมากกว่า 0

หากคุณต้องการตรวจสอบเงื่อนไขอื่น ๆ เพียงแค่แก้ไขอาร์กิวเมนต์แรกของประโยค IF

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.