SORTBY เรียงลำดับข้อมูลตาม Array อื่นที่กำหนด รองรับหลายระดับการเรียง (multi-level) และสามารถกำหนดลำดับเอง (custom sort order) ด้วย XMATCH ต่างจาก SORT ที่เรียงตามคอลัมน์ภายในตัวเอง SORTBY ใช้คอลัมน์ภายนอกเป็นเกณฑ์ได้
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| array | Range/Array | ช่วงข้อมูลที่ต้องการเรียงลำดับ (return ทั้ง array นี้) | |
| by_array1 | Range/Array | คอลัมน์หรือ Array ที่ใช้เป็นเกณฑ์เรียงลำดับ (ต้องมีจำนวนแถวเท่ากับ array) | |
| [sort_order1]ไม่บังคับ | Number | 1 | ลำดับการเรียง: 1 = น้อยไปมาก (A-Z), -1 = มากไปน้อย (Z-A) |
| [by_array2]ไม่บังคับ | Range/Array | – | คอลัมน์ที่ 2 สำหรับ multi-level sort (เรียงหลังจาก by_array1) |
| [sort_order2]ไม่บังคับ | Number | 1 | ลำดับการเรียงสำหรับคอลัมน์ที่ 2 |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
SORTBY เป็น Dynamic Array Function ที่เรียงลำดับข้อมูลตามคอลัมน์หรือ Array อื่นที่กำหนด ต่างจาก SORT ที่เรียงตามคอลัมน์ภายในตัวเอง SORTBY ใช้คอลัมน์ภายนอกเป็นเกณฑ์ได้ รองรับหลายระดับการเรียง (multi-level sort) และสามารถกำหนดลำดับเอง (custom sort order) ด้วย XMATCH ผลลัพธ์เป็น Spill Range ที่อัปเดตอัตโนมัติ
เรียงข้อมูลหลายระดับ เช่น เรียงตามแผนก A-Z แล้วเรียงตามเงินเดือนจากมากไปน้อยภายในแผนกเดียวกัน
เรียงตามลำดับที่กำหนดเอง เช่น Priority (Urgent, High, Normal, Low) โดยใช้ XMATCH
สร้างตารางอันดับที่อัปเดตอัตโนมัติเมื่อข้อมูลเปลี่ยน
| A | B | C | D | |
|---|---|---|---|---|
| 1 | รหัสสินค้า | ชื่อสินค้า | สถานะ | ราคา |
| 2 | P001 | เมาส์ไร้สาย | ปิด | 590 |
| 3 | P002 | คีย์บอร์ด | เปิด | 1,290 |
| 4 | P003 | จอ 27 นิ้ว | ปิด | 8,900 |
| 5 | P004 | หูฟัง | เปิด | 2,450 |
| 6 | P005 | เว็บแคม | ปิด | 1,750 |
ทุกสูตรด้านล่างอ้างถึงตารางนี้ พิมพ์ตามได้เลย ผลลัพธ์จะตรงกับที่เขียนไว้
SORTBY ต่างจาก SORT ตรงที่เกณฑ์การเรียงเป็นอีกช่วงหนึ่งต่างหาก ในที่นี้คือ D2:D6 (ราคา) ไม่ใช่เลขคอลัมน์ ส่วน array ที่ระบุ (A2:D6) ถูก return ออกมาทั้งก้อนตามลำดับที่เรียงได้
ราคาแพงสุด 8,900 ของ P003 ขึ้นมาก่อน ไล่ลงมาจนถึง P001 ที่ถูกสุด เหมือนกับผลลัพธ์ที่ SORT ทำได้ แต่เขียนคนละวิธี
ข้อดีคือ by_array ไม่จำเป็นต้องเป็นส่วนหนึ่งของ array หลักเลยก็ได้ ทำให้ยืดหยุ่นกว่า SORT ตรงจุดนี้
ระบุคู่เกณฑ์การเรียง 2 คู่ คู่แรก C2:C6 (สถานะ) เรียงน้อยไปมาก คู่ที่สอง D2:D6 (ราคา) เรียงมากไปน้อย ทำงานเหมือนเรียงตามสถานะก่อน แล้วเรียงตามราคาซ้อนภายในกลุ่มเดียวกันอีกที
ภายในกลุ่มสถานะเดียวกัน ราคาที่แพงกว่าจะขึ้นก่อนเสมอ เช่น กลุ่มปิดจะได้ P003 P005 P001 เรียงตามราคาไล่ลงมา
ต่างจาก SORT ตรงที่ SORTBY ระบุเกณฑ์เป็นช่วงข้อมูลจริงแยกกันคนละก้อน ไม่ต้องนับว่าเป็นคอลัมน์ที่เท่าไหร่ของ array หลัก
XMATCH หาตำแหน่งของค่าสถานะแต่ละแถวในลิสต์ {"เปิด","ปิด"} ที่กำหนดเอง ได้ตำแหน่ง 1 สำหรับเปิด และ 2 สำหรับปิด แล้ว SORTBY ก็เอาตำแหน่งนี้ไปเรียง
ผลลัพธ์เลยได้กลุ่มเปิดขึ้นมาก่อน (P002 P004) ตามด้วยกลุ่มปิด (P001 P003 P005) ซึ่งเป็นลำดับที่ไม่ใช่ A-Z ตามตัวอักษรเลย แต่เป็นลำดับที่เรากำหนดเองทั้งหมด
เทคนิคนี้เอาไปใช้เรียงสถานะงาน เช่น Urgent มาก่อน Normal มาก่อน Low ได้เลย ไม่ต้องพึ่ง Sort A-Z ตามตัวอักษร
ตัวอย่างนี้ใช้รหัสสินค้าเองเป็นเกณฑ์เรียง แต่กลับด้านเป็นมากไปน้อย (sort_order=-1) ทำให้ P005 ขึ้นมาอยู่บนสุดแทนที่จะเป็น P001
เหมาะกับสถานการณ์ที่อยากได้รายการล่าสุดหรือรหัสท้ายสุดขึ้นก่อน เช่น ออร์เดอร์ที่เพิ่งสร้างใหม่มักมีรหัสท้ายสุด
จะสังเกตว่า by_array ในที่นี้คือ A2:A6 ซึ่งเป็นคอลัมน์เดียวกับที่อยู่ใน array หลัก (A2:D6) ก็ทำได้เหมือนกัน ไม่จำเป็นต้องเป็นคอลัมน์นอกเสมอไป
กรองสถานะปิดออกมาก่อนด้วย FILTER ทั้ง array หลักและ by_array ต้องกรองด้วยเงื่อนไขเดียวกันทั้งคู่ ไม่งั้นจำนวนแถวจะไม่ตรงกันแล้วสูตรจะ error
หลังกรองได้ 3 แถว SORTBY ก็เรียงตามราคาจากน้อยไปมาก ได้ P001 ถูกสุดขึ้นก่อน ตามด้วย P005 แล้วปิดท้ายด้วย P003
รูปแบบนี้พบบ่อยเวลาต้องกรองก่อนแล้วค่อยเรียงตามเกณฑ์ที่ไม่ได้อยู่ในผลลัพธ์ที่กรองมาโดยตรง
ตัวอย่างนี้ไม่ได้เรียงตามคอลัมน์ไหนในตารางตรงๆ เลย แต่คำนวณเกณฑ์ขึ้นมาเองด้วย MOD(D2:D6,1000) ซึ่งเอาราคาหารเอาเศษด้วย 1,000 ก่อนแล้วค่อยเรียง
P002 ราคา 1,290 เหลือเศษ 290 น้อยที่สุด เลยขึ้นก่อน ไล่ไปจนถึง P003 ราคา 8,900 เหลือเศษ 900 มากที่สุด อยู่ล่างสุด
นี่คือจุดที่ SORTBY เหนือกว่า SORT ชัดเจนที่สุด เพราะ by_array เป็นสูตรคำนวณสดๆ ก็ยังใช้เป็นเกณฑ์เรียงได้เลย ไม่ต้องมีคอลัมน์นั้นอยู่ในตารางจริงๆ ก่อน
SORT เรียงตามคอลัมน์ภายใน array (ระบุเป็นเลขคอลัมน์) ส่วน SORTBY เรียงตาม Array อื่นภายนอกได้ และรองรับ custom sort order ด้วย XMATCH
ใช้ XMATCH กับ Array ที่กำหนดลำดับเอง เช่น =SORTBY(Data, XMATCH(Data[Status], {"High";"Medium";"Low"})) จะเรียง High ก่อน แล้ว Medium แล้ว Low
รองรับได้สูงสุด 126 คู่ (by_array, sort_order) แต่ในทางปฏิบัติ 2-3 ระดับก็เพียงพอ
เกิดเมื่อ by_array มีจำนวนแถวไม่เท่ากับ array หลัก ต้องตรวจสอบให้ขนาดเท่ากัน
Microsoft 365, Excel 2021, Excel 2024, และ Excel for Web เป็น Dynamic Array Function
ฟังก์ชันที่ผู้เขียนโยงไว้กับ SORTBY จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
DROP จะตัดข้อมูลออกตามจำนวนที่ระบุ ถ้าใส่เลขบวกจะตัดจากจุดเริ่มต้น (บน/ซ้าย) ทิ้งไป ถ้าใส่เลขลบจะตัดจากจุดสิ้นสุด (ล่าง/ขวา) ทิ้งไป ส่วนที่เหลือจะถูกนำมาแสดงผล
FILTER กรองข้อมูลจาก Array ตามเงื่อนไขที่กำหนด แล้ว return เป็น Spill Range ที่ขยายอัตโนมัติ เป็น Dynamic Array Function ที่เปลี่ยนวิธีการทำงานกับข้อมูลใน Excel รองรับเงื่อนไขหลายตัว (AND/OR) และสามารถใช้ร่วมกับ SORT UNIQUE XLOOKUP เพื่อสร้างรายงานที่อัปเดตอัตโนมัติ
SORT เป็น Dynamic Array Function ที่เรียงลำดับข้อมูลจาก Array แล้ว return เป็น Spill Range ใหม่โดยไม่แก้ไขข้อมูลต้นฉบับ รองรับการเรียงตามคอลัมน์ที่ต้องการ (sort_index) ทั้งจากน้อยไปมาก (1) และมากไปน้อย (-1) รวมถึงเรียงแนวนอน (by_col=TRUE) ต่างจาก SORTBY ที่ใช้คอลัมน์ภายนอกเป็นเกณฑ์
TAKE ช่วยตัดข้อมูลบางส่วนออกมาใช้งาน โดยระบุจำนวนที่ต้องการ ถ้าใส่เลขบวกจะดึงจากจุดเริ่มต้น (บน/ซ้าย) ถ้าใส่เลขลบจะดึงจากจุดสิ้นสุด (ล่าง/ขวา) คล้ายกับคำสั่ง LIMIT หรือ TOP/BOTTOM ใน Database
UNIQUE เป็น Dynamic Array Function ที่คืนค่าที่ไม่ซ้ำจาก Array โดยสามารถตรวจซ้ำตามแถวหรือคอลัมน์ (by_col) และเลือกคืนเฉพาะค่าที่พบครั้งเดียว (exactly_once) ผลลัพธ์เป็น Spill Range ที่อัปเดตอัตโนมัติ ใช้ร่วมกับ SORT FILTER COUNTIF เพื่อสร้างรายงานไดนามิกและ dropdown ที่อัปเดตเอง
XMATCH คืนค่าตำแหน่งของข้อมูลที่ค้นหาในช่วงหรืออาร์เรย์ ถือเป็นฟังก์ชันรุ่นใหม่ที่ Microsoft พัฒนามาแก้จุดอ่อนของ MATCH โดยเฉพาะเรื่องค่า Default ที่เป็น Exact Match แทน Approximate Match ทำให้ใช้ง่ายและปลอดภัยกว่ามาก นอกจากนี้ยังรองรับการค้นหาย้อนกลับ Binary Search สำหรับข้อมูลขนาดใหญ่ และการค้นหาแบบ Wildcard ทำให้ยืดหยุ่นกว่า MATCH เดิมหลายเท่า
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่