นี่คือสิ่งที่ฉันเชื่อว่าเป็นทางออกที่ดีที่สุด:
=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)
อ่านเพิ่มเติม
โซลูชันอื่น ๆ ในชุดข้อความนี้มีความซับซ้อนมากเกินไปหรือล้มเหลวในกรณีขอบเฉพาะที่ฉันระบุในแผ่นทดสอบนี้:
สำหรับวิธีการCountA
ทำงานที่ไม่ค่อยมีประสิทธิภาพให้ดูคำตอบของฉันที่นี่