Thep Excel

COUNTROWS – นับจำนวนแถวในตารางและเทบิลเสมือน

COUNTROWS เป็นฟังก์ชันการรวม (Aggregation) ที่นับจำนวนแถวในตารางที่ระบุ ไม่ว่าจะเป็นตารางจริงในโมเดลหรือตารางเสมือน (Virtual Table) จากฟังก์ชันอื่นๆ เช่น FILTER, VALUES, DISTINCT นับเท่าไหร่? ผลลัพธ์ก็คือจำนวนแถวเต็ม ๆ

=COUNTROWS(<table>)

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
9/10

Difficulty
2/10

Usefulness
9/10

Syntax & Arguments

=COUNTROWS(<table>)

Argument Type Required Default Description
table table Yes ตารางที่ต้องการนับจำนวนแถว อาจเป็นตารางจริง (Sales, Customers) หรือตารางเสมือนจากฟังก์ชัน (FILTER, VALUES, DISTINCT, GENERATE)

How it works

นับจำนวนแถวหลังกรองด้วยเงื่อนไข

ใช้ COUNTROWS ครอบตารางที่ได้จาก FILTER เพื่อวัดจำนวนรายการที่ผ่านเงื่อนไข

นับจำนวนค่าที่ไม่ซ้ำ (Distinct Count แบบยืดหยุ่น)

ใช้ COUNTROWS(VALUES(Column)) เพื่อนับจำนวนค่าที่ไม่ซ้ำในบริบทปัจจุบัน โดยสามารถต่อยอดด้วยการกรองตารางก่อนนับได้

Examples

นับแถวทั้งหมดในตาราง (ภายใต้ Filter Context)
Total Orders = COUNTROWS( Sales )
ถ้าตาราง Sales มี 2,452 แถว จะคืนค่า 2,452 ถ้ามีการเลือก 'Region = North' จากหน้าจอ ก็นับเฉพาะแถวใน Sales ที่เป็น Region North เท่านั้น COUNTROWS ศึกษา Filter Context โดยอัตโนมัติ
DAX Formula:

Total Orders =
COUNTROWS( Sales )

Result:

2,452

นับแถวที่ผ่านเงื่อนไขด้วย FILTER
Large Orders = COUNTROWS( FILTER( Sales, Sales[Amount] > 5000 ) )
FILTER สร้างตารางเสมือนของแถว Sales ที่ Amount > 5,000 จากนั้น COUNTROWS นับจำนวนแถวของตารางเสมือนนั้น ผลลัพธ์คือจำนวน Order ที่มียอดเงินมากกว่า 5,000 บาท
DAX Formula:

Large Orders =
COUNTROWS(
    FILTER(
        Sales,
        Sales[Amount] > 5000
    )
)

Result:

185

นับค่าที่ไม่ซ้ำกัน (DISTINCTCOUNT ทางเลือก)
Unique Customers = COUNTROWS( VALUES( Sales[CustomerID] ) )
VALUES สร้างตารางเสมือนของ CustomerID ที่ไม่ซ้ำ COUNTROWS นับแถวของตารางนั้น ผลลัพธ์คือจำนวนลูกค้าที่ไม่ซ้ำ นี่คือวิธี COUNTROWS + VALUES = DISTINCTCOUNT แต่ยืดหยุ่นมากขึ้น
DAX Formula:

Unique Customers =
COUNTROWS(
    VALUES( Sales[CustomerID] )
)

Result:

528

นับแถวเสมือนเชิงซ้อนด้วย VAR
High Value Customer Count = VAR FilteredOrders = FILTER( Sales, Sales[Amount] > CALCULATE(AVERAGE(Sales[Amount]), ALL(Sales)) ) VAR UniqueCustInLargeOrders = CO…
ตัวอย่างที่ซับซ้อนขึ้น: ก่อนอื่นกรอง Sales ให้เหลือเฉพาะแถวที่ Amount มากกว่าค่าเฉลี่ยทั้งหมด จากนั้นใช้ SELECTCOLUMNS เพื่อเลือกเฉพาะคอลัมน์ CustomerID แล้ว VALUES เพื่อให้ได้ค่า Unique ของ CustomerID สุดท้าย COUNTROWS นับจำนวนลูกค้าที่ไม่ซ้ำในกลุ่มคำสั่งขนาดใหญ่ นี่คือการรวมกำลัง Filter + SELECTCOLUMNS + VALUES + COUNTROWS
DAX Formula:

High Value Customer Count =
VAR FilteredOrders = 
    FILTER(
        Sales,
        Sales[Amount] > CALCULATE(AVERAGE(Sales[Amount]), ALL(Sales))
    )
VAR UniqueCustInLargeOrders = 
    COUNTROWS(
        VALUES(
            SELECTCOLUMNS(
                FilteredOrders,
                "CID", Sales[CustomerID]
            )
        )
    )
RETURN
    UniqueCustInLargeOrders

Result:

287

FAQs

COUNTROWS ต่างจาก COUNT อย่างไร? ควรใช้ตัวไหน?

Microsoft Best Practice: ใช้ COUNTROWS แทน COUNT เสมอ COUNTROWS นับแถว (Rows) ทั้งหมด COUNT นับเฉพาะค่าตัวเลขที่ไม่ใช่ BLANK จึงข้ามแถวที่มี BLANK ไป ใช้ COUNT เฉพาะเมื่อต้องการยกเว้น BLANK โดยเฉพาะ หรือต้องการนับค่าตัวเลขในคอลัมน์ COUNTROWS ที่นอกจากเร็วกว่า ยังให้ผลถูกต้องที่สุด

ทำไมบางครั้ง COUNTROWS(VALUES(Column)) รวมค่า BLANK เข้ามา?

เพราะว่า VALUES รวมค่า BLANK เข้ามาด้วย ถ้าคอลัมน์มี BLANK จริง ๆ VALUES จะคืนค่า BLANK เป็นแถวหนึ่ง จากนั้น COUNTROWS ก็นับ BLANK แถวนั้นด้วย หากต้องการหลีกเลี่ยงให้กรอง BLANK ออกด้วย FILTER: COUNTROWS(FILTER(VALUES(Column), NOT(ISBLANK(Column))))

COUNTROWS กับ COUNTA/COUNTAX ต่างกันหรือ?

COUNTROWS นับแถว COUNTA นับเซลล์ที่ไม่ใช่ BLANK ใน ‘คอลัมน์’ COUNTAX คือ iterator (วนลูป) นับแล้ว evaluate expression ในแต่ละแถว ส่วนใหญ่ใช้ COUNTROWS เพราะเร็วและชัดเจน COUNTAX ใช้เมื่อต้องนับแบบมีเงื่อนไขเชิงซับซ้อน

COUNTROWS ส่งค่า 0 หรือ BLANK เมื่อตารางว่างเปล่า?

ส่ง BLANK (ไม่ใช่ 0) ถ้าตารางไม่มีแถวเลย COUNTROWS(FILTER(Sales, Sales[Amount] > 1000000)) ถ้าไม่มี Order ที่มากกว่า 1 ล้าน ผลลัพธ์คือ BLANK ไม่ใช่ 0 ที่สำคัญ: BLANK ≠ 0 ให้ระวัง

Resources & Related

Related functions

Additional Notes

COUNTROWS ใช้นับจำนวนแถวในตาราง โดยไม่สนใจว่าแถวนั้นมีค่าอะไรอยู่ นั่นคือ ‘แถว’ กับ ‘ค่าในแถว’ คนละเรื่องกัน

ที่เจ๋งคือ COUNTROWS ทำงานได้ดีกับทุกสถานการณ์: ตารางจริง (Sales, Customers) หรือตารางเสมือนจากฟังก์ชันทำการ Filter (FILTER, VALUES, DISTINCT) บริบท Filter Context ก็ถูกพิจารณาโดยอัตโนมัติ ถ้ามีการสลักตัวกรองจากหน้าจออยู่ COUNTROWS ก็นับเฉพาะแถวที่ผ่านตัวกรองเหลือเท่านั้น

ส่วนตัวผมว่า COUNTROWS คือ ‘ความจริงใจ’ ของการนับในDAX – มันนับแล้วจบ ไม่มีเล่นเกม ไม่มี BLANK ขาด ขาดก็ขาด 😎

Leave a Reply

Your email address will not be published. Required fields are marked *