การใช้ฟังก์ชัน SORTBY ใน Excel

ภาพรวม

ฟังก์ชัน SORTBY ใช้ดึงพร้อมกับเรียงลำดับข้อมูลจาก array หรือ range อื่น โดยที่ข้อมูลที่ได้มา จะเปลี่ยนไปตามข้อมูลต้นฉบับและเรียงลำดับให้ใหม่ด้วย

หากใครได้อ่านโพสต์ก่อนที่หน้านี้ ที่เราพูดถึงฟังก์ชัน SORT ไปแล้ว การใช้งานจะคล้ายกัน แต่ SORT จะเรียงลำดับตามข้อมูลใน array หรือ range โดยยึดที่คอลัมภ์ใดคอลัมภ์หนึ่งเท่านั้น หรือแถวใดแถวหนึ่งเท่านั้น ในกรณีที่เรากำหนดให้จัดลำดับข้อมูลที่วางแบบแนวคอลัมภ์

แต่ใน SORTBY จะเรียงลำดับข้อมูลให้จาก 1 คอลัมภ์หรือมากกว่านั้นก็ได้ และคอลัมภ์ที่เป็นเงื่อนไขในการจัดเรียงก็ไม่จำเป็นต้องอยู่ในข้อมูลด้วย

ตัวอย่างการใช้งาน

ตัวอย่างข้อมูลด้านล่าง สมมติเราต้องการจัดเรียงข้อมูลพนักงานตามแผนกจากน้อยไปหามาก (A-Z)

โดยข้อมูลนี้สามารถ ดูและดาวน์โหลด ได้เลย (File > Save As > Download a Copy)

สูตรที่ใช้ก็จะเป็นดังนี้ (กรณีที่ข้อมูลทำเป็น table ไว้แล้ว)

=SORTBY(tblEmployees[#Data],tblEmployees[dept])

หรือสำหรับข้อมูลที่เป็น range สูตรจะเป็น

=SORTBY($A$2:$F$21,$F$2:$F$21)

💡โดยจะสังเกตว่า การใช้งานแบบนี้ก็แทบจะเหมือนกับฟังก์ชัน SORT เลย

แต่ที่จริงแล้ว SORTBY มันยืดหยุ่นกว่านั้น มาดูกันครับ

จัดเรียงข้อมูล โดยเงื่อนไขที่ไม่ได้อยู่ในข้อมูล

ตัวอย่างจากข้อมูลชุดเดิม เราอยากได้ชื่อพนักงานเรียงตามอายุ แต่อายุอาจดูก้ำกึ่งเป็น sensitive data เราเลยไม่อยากให้มันแสดงในรายการ สูตรก็จะเป็น

=SORTBY(tblEmployees[[emp_id]:[preferred_name]],tblEmployees[dept])

และก็จะได้ผลลัพธ์ดังนี้

จัดเรียงข้อมูลจากหลายเงื่อนไข (หลายคอลัมภ์)

กรณีนี้จะคล้ายกับการเรียงลำดับข้อมูลหลายระดับที่เราคลิกเลือกเอาใน Excel เลย เพียงแค่เราเขียนในสูตรใส่ในเซลล

เช่น หากเราอยากเรียงลำดับข้อมูลพนักงานตาม
1) แผนก (จากน้อยไปหามาก)
2) รหัสพนักงาน (จากมากไปหาน้อย)

สูตรก็จะเป็นดังนี้ สำหรับแบบ table

=SORTBY(tblEmployees[#Data],tblEmployees[dept],1,tblEmployees[emp_id],-1)

ส่วนสำหรับ range ปกติจะเป็น

=SORTBY($A$2:$F$21,$F$2:$F$21,1,$A$2:$A$21,-1)

หวังว่าคงพอเห็นภาพการใช้งานฟังก์ชัน SORTBY และความแตกต่างกับ SORT ได้ดีขึ้นนะครับ

รูปแบบการใช้งาน

=SORTBY(array,by_array1,[sort_order1],[by_array2],[sort_order2],...)
จำเป็น?อาร์กิวเมนต์คำอธิบาย
จำเป็นarrayข้อมูลที่เราต้องการและจะนำมาเรียงลำดับ อาจจะเป็น range หรือ array ที่ได้มาจากพวกฟังก์ชัน dynamic array ทั้งหลาย
จำเป็นby_array1range หรือ array ที่เป็นเงื่อนไขหรือรูปแบบการเรียงลำดับ
ไม่ใส่ก็ได้[sort_order1]ตัวเลขใช้ระบุวิธีการจัดลำดับ โดย ใช้ 1 หากต้องการเรียงจากน้อยไปมากและให้ใช้ -1 เมื่อต้องการให้เรียงจากมากไปน้อย
ไม่ใส่ก็ได้[by_array2]range หรือ array ลำดับที่ 2 ที่เป็นเงื่อนไขหรือรูปแบบการเรียงลำดับ
ไม่ใส่ก็ได้[sort_order2]ตัวเลขใช้ระบุวิธีการจัดลำดับของ [by_array2] โดย ใช้ 1 หากต้องการเรียงจากน้อยไปมากและให้ใช้ -1 เมื่อต้องการให้เรียงจากมากไปน้อย

และ ... นั้นหมายถึง คุณสามารถใส่คูุ array หรือ range กับตัวเลขระบุวิธีการจัดอันดับไปได้เรื่อย ๆ

สิ่งที่ควรทราบ

  • หากขนาดของ array หรือ range ของ array กับ by_array1 ไม่เท่ากัน จะแสดง error เป็น #VALUE!
  • อาร์กิวเมนต์ by_array1 จะต้องเป็น 1 คอลัมภ์ หรือ 1 แถวเท่านั้น
  • คำว่าเรียงลำดับจากน้อยไปมาก หรือจากมากไปน้อย นั้นจะหมายถึงตามลำดับใน ASCII code และ มอก. 620 นะ 💡แต่ถ้าเป็นเลขไทยลำดับจะมาก่อน ถึงแม้ว่าลำดับใน มอก. 620 จะมากกว่าอักขระ และจะให้ค่ากลับมาเป็นเลขอารบิก 😂 ก็คือ Excel น่าจะมีฟังก์ชันแปลงให้อีกทีแหละ
  • ฟังก์ชัน SORT เป็นหนึ่งในฟังก์ชันแบบ dynamic array ดังนั้นคุณอาจเจอ #SPILL! ได้ อ่านข้อแนะนำการใช้งานได้จาก วิธีแก้ SPILL error ใน Excel


Posted

in

by

Tags:

Comments

Leave a Reply

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.