Tips: ทำไมต้องใช้ Cascading Dropdowns (Dependent Dropdown list) … มันเจ๋งกว่าที่คิดนะเว้ย!



เคยเป็นมั้ย? เวลาเราทำ Dropdown แบบปกติ ใน Google Sheets มันจะมีตัวเลือกให้ยาวเป็นหางว่าว เลือกจังหวัดก็มีเป็นสิบ ๆ ช่อง (บางทีร้อยด้วยนะ) พอเลือกเสร็จปุ๊บ… ดีใจแป๊บเดียว เพราะช่องถัดไป (เช่น อำเภอ) ก็ดันโชว์ให้เลือกยาว ๆ เหมือนเดิมอีก


ไอ้ตอนแรกคิดว่า “โอเคนะ ก็มีข้อมูลครบดี” แต่พอใช้จริงนี่แบบ… หืม กว่าจะเลื่อนหาชื่อที่ต้องการได้ ก็ตาแทบจะเป็นตะคริว 🤯 คือระบบมันไม่รู้จัก กรองตัวเลือก ให้เราเลยว่ะ! ไม่ว่าจะเลือกจังหวัดไหนก็ตาม ช่องอำเภอก็โชว์หมดทุกอำเภอในประเทศไทย… โอ้โห นี่แหละข้อเสียโคตรใหญ่ของ Dropdown ธรรมดา ๆ


แล้วทำไงดี? 🤔

นี่แหละที่ Cascading Dropdowns หรือ Dependent Dropdown list โผล่มาเท่ ๆ แบบพระเอกในละครหลังข่าว มาช่วยชีวิตเรา!

Cascading Dropdowns ก็คือระบบ Dropdown ที่ “ฉลาด” กว่าเดิม ตรงที่มันจะเปลี่ยนตัวเลือกให้สัมพันธ์กัน

เช่น

  • ถ้าเลือก กรุงเทพฯ → ช่องถัดไปก็จะมีให้เลือกเฉพาะอำเภอของกรุงเทพฯ เท่านั้น
  • ถ้าเลือก เชียงใหม่ → อำเภอใน Dropdown ก็จะเปลี่ยนเป็นเฉพาะของเชียงใหม่


สั้น ๆ เลยคือ มันไม่ทำให้เรามึนหัวกับการเลื่อนหา “ของที่ไม่เกี่ยวข้อง” อีกต่อไป 🥳


มาดูวิธีทำกัน

ผมจะยกตัวอย่างการทำบันทึกรายรับรายจ่าย

1. ออกแบบฟอร์มที่เราจะใช้บันทึกให้เป็นที่เรียบร้อย


2. แต่ละแถวที่เป็น Dropdown ให้เตรียมวางไว้เลยว่าจะมีหัวข้ออะไรแยกย่อยลงไปได้บ้าง พยายามให้เป็นภาษาอังกฤษเอาไว้ก็จะดีครับ เพราะมันมีผลกับการตั้งชื่อ (Named Ranges) ในขั้นตอนถัดไป


3. หลังจากใส่รายละเอียดเรียบร้อย ขั้นตอนต่อไปคือเราจะต้องตั้งชื่อ (Named Ranges) ให้แต่ละแถว ตามรูปข้างล่างเลยจ้า

ลากครอบคลุมหัวข้อทั้งหมดในแถวนั้นๆ --> Data --> Named Ranges


4. ไปที่หน้าหลักที่เราจะใช้กรอกข้อมูล แล้วเอาฟังก์ชั่นนี้ไปใส่ได้เลยครับ

"=if(C2="","",transpose(filter(Indirect(C2),indirect(C2)<>"")))"


เมื่อเราใส่ Code ลงไป แล้วเรามาเลือกที่ช่อง C2 เป็น "Expenses" แถว J2 ที่เราใส่ Code มันจะขึ้นหัวข้อที่เราใส่อยู่ข้างใต้หัวข้อ "Expenses" 

ทีนี้ในช่องดีเราก็ใช้ Dropdown โดยเลือกเป็น Dropdown (from ranges) แล้วก็เลือกข้อมูลที่แถว J2 ถึง จนสุดหัวข้อย่อยหรือเลยไปหน่อยก็ได้ ในที่นี้คือ T2 หรือเราจะลากไปถึง U2 หรือ V2 ก็ได้นะ 


และถ้ายังมีต่อไปอีก เราก็ต้องใส่ Code เดิมต่อจากแถม T2 ไปอีก แต่ครั้งนี้จะมีการปรับนิดหน่อย คือจากเดิม "C2" ให้เปลี่ยนเป็น "D2"

"=iferror(if(D2="","",transpose(filter(Indirect(D2),indirect(D2)<>""))),"")"

มาดูผลลัพธ์ที่ออกมากัน

หวังว่าผมจะอธิบายรู้เรื่องนะครับ ลองเอาไปปรับใช้กันดูได้เลยครับ

Comments