FILTER กรองข้อมูลจาก Range แล้วแสดงเฉพาะแถว/คอลัมน์ที่ตรงเงื่อนไข รองรับหลายเงื่อนไข (AND/OR) และอัปเดตผลลัพธ์แบบ Real-time เมื่อข้อมูลต้นทางเปลี่ยน ทำให้เหมาะกับการสร้างรายงานไดนามิก
=FILTER(range, condition1, [condition2, ...])
=FILTER(range, condition1, [condition2, ...])
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| range | Range | Yes | ช่วงข้อมูลที่ต้องการกรอง สามารถเป็นหลายคอลัมน์ได้ | |
| condition1 | Array | Yes | เงื่อนไขแรกในการกรอง ต้องเป็น Array ของค่า TRUE/FALSE ที่มีจำนวนแถวหรือคอลัมน์เท่ากับ range สามารถใช้นิพจน์เปรียบเทียบ เช่น B2:B100>1000 หรือ C2:C100=”North” |
|
| condition2 | Array | Optional | เงื่อนไขเพิ่มเติม (Optional) สามารถใส่ได้หลายเงื่อนไข เงื่อนไขทั้งหมดจะทำงานแบบ AND (ต้องเป็นจริงทุกเงื่อนไข) ถ้าต้องการ OR ใช้เครื่องหมาย + เช่น (condition1+condition2) |
กรองข้อมูลตามเงื่อนไขหลายข้อ เช่น ยอดขายตามภูมิภาค ช่วงวันที่ หรือประเภทสินค้า แล้วอัปเดตอัตโนมัติเมื่อข้อมูลต้นทางเปลี่ยน
แยกข้อมูลเฉพาะที่ต้องการ เช่น รายการสินค้าที่ราคามากกว่า 1000 บาท หรือพนักงานที่อายุมากกว่า 30 ปี
สร้าง Dashboard ที่มี Dropdown หรือ Input เพื่อให้ผู้ใช้เลือกเงื่อนไข แล้ว FILTER จะแสดงผลตามเงื่อนไขที่เลือกทันที
ใช้ร่วมกับ SUM, AVERAGE, COUNT เพื่อคำนวณจากข้อมูลที่กรองแล้ว เช่น =SUM(FILTER(Sales, Region="North"))
FILTER({"Apple",100; "Banana",50; "Orange",150; "Mango",80}, {100; 50; 150; 80}>100)=FILTER({"Apple",100; "Banana",50; "Orange",150; "Mango",80}, {100; 50; 150; 80}>100)
Apple 100
Orange 150
FILTER({"North",1500; "South",800; "North",2000; "East",1200}, {"North"; "South"; "North"; "East"}="North", {1500; 800; 2000; 1200}>1000)=FILTER({"North",1500; "South",800; "North",2000; "East",1200}, {"North"; "South"; "North"; "East"}="North", {1500; 800; 2000; 1200}>1000)
North 1500
North 2000
FILTER({"Apple",100; "Banana",50; "Orange",150}, ({100; 50; 150}120))=FILTER({"Apple",100; "Banana",50; "Orange",150}, ({100; 50; 150}<60)+({100; 50; 150}>120))
Banana 50
Orange 150
SORT(FILTER({"North",1500; "South",800; "North",2000; "East",1200}, {1500; 800; 2000; 1200}>1000), 2, FALSE)=SORT(FILTER({"North",1500; "South",800; "North",2000; "East",1200}, {1500; 800; 2000; 1200}>1000), 2, FALSE)
North 2000
North 1500
East 1200
ปัญหานี้เจอบ่อยมากครับ 😅 สาเหตุหลักคือ FILTER หาข้อมูลที่ตรงเงื่อนไขไม่เจอเลยแม้แถวเดียว
.
แก้ได้โดยใช้ IFERROR หรือ IFNA ครอบไว้ เช่น =IFERROR(FILTER(…), “ไม่พบข้อมูล”) หรือ =IFNA(FILTER(…), “ไม่มีรายการที่ตรงเงื่อนไข”)
.
ส่วนตัวผมแนะนำให้ใช้ IFNA มากกว่า IFERROR เพราะจะจัดการเฉพาะกรณีไม่เจอข้อมูล ไม่ได้ซ่อน Error ประเภทอื่นที่อาจเกิดจากสูตรผิดพลาด
FILTER และ QUERY ทำงานคล้ายกันคือกรองข้อมูล แต่มีข้อแตกต่างสำคัญครับ
.
FILTER เขียนแบบ Formula ปกติ เหมาะกับเงื่อนไขง่ายๆ และทำงานเร็วกว่า
.
QUERY ใช้ภาษา SQL-like ซึ่งทรงพลังกว่า สามารถ GROUP BY, SUM, AVERAGE ได้ในสูตรเดียว แต่เขียนยากกว่าเล็กน้อย
.
ส่วนตัวผมใช้ FILTER สำหรับกรองธรรมดา แต่ถ้าต้องการสรุปข้อมูลหรือจัดกลุ่ม จะเปลี่ยนไปใช้ QUERY แทน 💡
ไม่ได้โดยตรงครับ FILTER จะกรองได้ทีละมิติ (แถว หรือ คอลัมน์)
.
แต่เราสามารถ Nest FILTER 2 ชั้นได้ เช่น =FILTER(FILTER(A1:D100, B1:B100>1000), {TRUE, FALSE, TRUE, FALSE}) จะกรองแถวก่อน (B>1000) แล้วกรองคอลัมน์ที่ 1,3 ต่อ
.
ส่วนตัวผมเคยใช้เทคนิคนี้สร้าง Dashboard ที่ให้ผู้ใช้เลือกได้ทั้งเงื่อนไขแถว (เช่น วันที่) และคอลัมน์ที่จะแสดง (เช่น เลือกแสดงเฉพาะคอลัมน์ที่สนใจ)
ได้ครับ สามารถอ้างอิง Range จาก Sheet อื่นได้ตามปกติ
.
ตัวอย่าง: =FILTER(Data!A2:C100, Data!B2:B100>1000) จะกรองข้อมูลจาก Sheet ชื่อ “Data”
.
ที่ต้องระวังคือต้องแน่ใจว่า Range ของเงื่อนไข (Data!B2:B100) มีจำนวนแถวเท่ากับ Range หลัก (Data!A2:C100) ถ้าไม่เท่ากันจะได้ #VALUE! Error
ตอนกรองข้อความต้องใส่ใน Double Quotes (“) และต้องตรงทุกตัวอักษรรวมถึง Case ด้วยครับ
.
เช่น =FILTER(A2:B10, A2:A10=”North”) จะหา “North” เท่านั้น ถ้าเป็น “north” หรือ “NORTH” จะไม่ตรง
.
ถ้าต้องการไม่สนใจ Case ใช้ UPPER หรือ LOWER ครอบทั้ง 2 ฝั่ง เช่น =FILTER(A2:B10, UPPER(A2:A10)=”NORTH”)
.
ส่วนตัวผมมักใช้ SEARCH หรือ REGEXMATCH แทนถ้าต้องการหาแบบ Partial Match เช่น =FILTER(A2:B10, ISNUMBER(SEARCH(“North”, A2:A10))) จะหาทุกเซลล์ที่มีคำว่า “North” อยู่ด้วย 😎
ใช้ได้ครับ แต่เฉพาะ Excel 365 และ Excel 2021 เท่านั้น (Excel เวอร์ชันเก่าไม่มี)
.
ไวยากรณ์แตกต่างกันเล็กน้อย:
• Google Sheets ใช้ comma สำหรับ AND: =FILTER(A:C, B:B>100, C:C=”X”)
• Excel ใช้ * สำหรับ AND: =FILTER(A:C, (B:B>100)*(C:C=”X”))
.
Excel มี parameter if_empty ที่ Google Sheets ไม่มี =FILTER(A:C, B:B>100, “ไม่พบข้อมูล”)
.
ส่วนตัวผมคิดว่า syntax ของ Google Sheets อ่านง่ายกว่า แต่ Excel มี if_empty ทำให้จัดการ Error สะดวกกว่า ✨
FILTER ใช้กรองข้อมูลจาก Range ที่กำหนด โดยจะแสดงเฉพาะแถวหรือคอลัมน์ที่ตรงกับเงื่อนไขที่ระบุ
.
ที่เจ๋งคือ FILTER เป็น Dynamic Array Function ซึ่งหมายความว่าผลลัพธ์จะกระจายออกมาเองอัตโนมัติ ไม่ต้องลากสูตรทีละเซลล์ ถ้าข้อมูลต้นทางเปลี่ยน ผลลัพธ์ก็จะอัปเดตทันทีแบบ Real-time
.
ส่วนตัวผมคิดว่า FILTER เป็นหนึ่งในฟังก์ชันที่ทรงพลังที่สุดใน Google Sheets เลย เพราะสามารถสร้างรายงานแบบไดนามิกได้ง่ายมาก แค่เปลี่ยนเงื่อนไข ข้อมูลก็เปลี่ยนทันที 😎
.
ที่ต้องระวังคือถ้า FILTER หาข้อมูลที่ตรงเงื่อนไขไม่เจอเลยแม้แถวเดียว จะคืน #N/A Error ทันที ซึ่งเราสามารถจัดการได้ด้วย IFERROR หรือ IFNA