Thep Excel

CONTAINSROW – ตรวจสอบว่าแถวอยู่ในตาราง

CONTAINSROW ตรวจสอบว่ามีแถวที่ค่าคอลัมน์ตรงกันหมดหรือไม่ ถ้าเจอจะคืนค่า TRUE ไม่มีจะคืน FALSE

=CONTAINSROW(<table>, <value> [, <value> [, ... ] ])

By ThepExcel AI Agent
14 December 2025

Function Metrics


Popularity
5/10

Difficulty
4/10

Usefulness
5/10

Syntax & Arguments

=CONTAINSROW(<table>, <value> [, <value> [, ... ] ])

Argument Type Required Default Description
table Table Yes ตารางที่ต้องการเช็ค สามารถเป็นตาราง inline เช่น {“Red”, “Blue”} หรือตาราง DAX เช่น SUMMARIZE() VALUES() ได้
value Scalar Yes ค่าที่ต้องการเช็คว่าตรงกันหรือไม่ จำนวนค่าต้องเท่ากับจำนวนคอลัมน์ในตาราง เรียงตามลำดับคอลัมน์ สามารถใส่หลายค่าได้

Examples

ตัวอย่างที่ 1: เช็คสีในตารางอินไลน์
Has Valid Color = CONTAINSROW( { "Red", "Blue", "Yellow" }, "Red" )
ตรวจสอบว่า "Red" อยู่ในรายชื่อสีหรือไม่ เนื่องจากมี "Red" อยู่ ผลลัพธ์คือ TRUE ใช้ตรวจสอบค่าเดี่ยวแบบง่ายๆ
DAX Formula:

Has Valid Color = CONTAINSROW( { "Red", "Blue", "Yellow" }, "Red" )

Result:

TRUE

ตัวอย่างที่ 2: เช็คคู่ ProductID-StoreID
Has Product-Store Pair = VAR Pairs = SUMMARIZE(Sales, Sales[ProductID], Sales[StoreID]) RETURN CONTAINSROW(Pairs, 101, 5)
สร้างตารางคู่ (ProductID, StoreID) จาก Sales ด้วย SUMMARIZE แล้วใช้ CONTAINSROW เพื่อเช็คว่ามีคู่ (101, 5) อยู่ในตารางหรือไม่ เหมาะสำหรับ validate master data
DAX Formula:

Has Product-Store Pair = 
VAR Pairs = SUMMARIZE(Sales, Sales[ProductID], Sales[StoreID])
RETURN CONTAINSROW(Pairs, 101, 5)

Result:

TRUE หรือ FALSE

ตัวอย่างที่ 3: ใช้กับ FILTER เพื่อกรองผลลัพธ์
Valid Products = FILTER( ALL(Product[Name]), CONTAINSROW( VALUES(Product[Category]), Product[Category] ) )
กรองสินค้าเฉพาะที่มี Category อยู่ในตาราง Category master ใช้ CONTAINSROW เป็นตัวกรองใน FILTER เพื่อคัดเลือกเฉพาะแถวที่ valid
DAX Formula:

Valid Products = 
FILTER(
    ALL(Product[Name]),
    CONTAINSROW(
        VALUES(Product[Category]),
        Product[Category]
    )
)

Result:

รายชื่อสินค้าที่มี Category ขึ้นทะเบียน

ตัวอย่างที่ 4: ใช้ NOT เพื่อกรองตรงข้าม
Invalid Stores = FILTER( ALL(Store[StoreID]), NOT CONTAINSROW( VALUES(Sales[StoreID]), Store[StoreID] ) )
ค้นหาสาขาที่ไม่มีใครซื้อ (ไม่อยู่ในตาราง Sales) โดยใช้ NOT CONTAINSROW จะดูเหมือนหา missing records ใน master table
DAX Formula:

Invalid Stores = 
FILTER(
    ALL(Store[StoreID]),
    NOT CONTAINSROW(
        VALUES(Sales[StoreID]),
        Store[StoreID]
    )
)

Result:

รายชื่อสาขาที่ไม่มีการขายบันทึก

FAQs

CONTAINSROW และ IN operator ต่างกันอย่างไร?

ตัวจริงแล้ว IN operator ทำงานเหมือน CONTAINSROW เลย ผมค่อนข้างมองว่า IN เป็น syntax ที่สะดวกกว่า เขียน Product[Color] IN {“Red”, “Blue”} ง่ายกว่า CONTAINSROW({“Red”, “Blue”}, Product[Color]) แต่ผลลัพธ์เหมือนเดิม

ต้องส่งค่ากี่ตัวใน value parameter?

ต้องส่งให้เท่ากับจำนวนคอลัมน์ในตาราง เช่นตารางมี 2 คอลัมน์ต้องส่ง 2 ค่า ตาราง 3 คอลัมน์ต้องส่ง 3 ค่า เรียงตามลำดับคอลัมน์นะ ถ้าจำนวนไม่ตรง DAX จะขึ้น error

BLANK กับ 0 ต่างกันไหม?

ผม highlight ตรงนี้เพราะสำคัญ CONTAINSROW ใช้ strict comparison หมายความว่า BLANK ไม่เท่ากับ 0 ตรงกันข้ามกับ = operator แบบปกติ ถ้าคอลัมน์มี BLANK และคุณส่ง 0 มา CONTAINSROW จะคืน FALSE เพราะมันถือว่าไม่ตรงกัน

ใช้ CONTAINSROW เมื่อไหร่ดี?

ผมใช้ CONTAINSROW เวลาต้องตรวจสอบความสมบูรณ์ข้อมูล (data integrity) เช่น Product-Store mapping complete ไหม Customer สั่งซื้อครบทั้งประเทศไหม หรือต้อง lookup หลายคอลัมน์พร้อมกัน ถ้าเช็คแค่คอลัมน์เดียว CONTAINS หรือ IN ก็พอ

Resources & Related

Additional Notes

CONTAINSROW คือฟังก์ชันสำหรับเช็คว่ามีแถวใดในตารางที่ค่าคอลัมน์ทั้งหมดตรงกับที่ระบุหรือไม่ มันสำคัญเวลาต้องการทำ lookup แบบหลายคอลัมน์พร้อมกัน

ที่เจ๋งคือ CONTAINSROW ทำให้การเช็คค่าหลายคอลัมน์พร้อมกันง่ายขึ้น เทียบเสมือนว่าคุณมีรายชื่อคู่ (ProductID, StoreID) และต้องการรู้ว่ามีคู่ (101, 5) อยู่ในรายชื่อนั้นหรือไม่ ถ้าตัวเลขตรงครบ เงื่อนไขที่มีก็ให้ TRUE ส่วนตัวผมใช้ CONTAINSROW เวลาต้องทำ master-detail validation หรือ check data integrity ระหว่างตาราง

Leave a Reply

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