ตัวเลือกจังหวัด อำเภอ ตำบล แบบลูกโซ่ ไม่ใช้แมโคร (Droplist combo box/Dependent Dropdown List)

น่าจะมีคนใช้บ่อย ๆ กับแบบฟอร์มที่อยู่ ที่อยากให้เลือกข้อมูล จังหวัด แล้วแสดงอำเภอเฉพาะจังหวัดที่เลือก แล้วแสดงตำบลของอำเภอที่เลือก เป็นแบบลูกโซ่ ใน Excel (Dependent Dropdown List) สามารถทำได้ครับ ไม่ยาก ผมได้ทำมาสำเร็จรูปมาให้ใช้งานแล้วครับ โดยเป็น Droplist ธรรมดา ไม่ได้ใช้แมโครหรือคำสั่งพิเศษแต่ประการใด แต่ใช้วิธีสร้าง Formula Name ตามชื่อจังหวัด จังหวัด+อำเภอ เอาไว้ล่วงหน้า แล้วใช้คำสั่ง INDIRECT ในการดึงมาใช้งานอีกที (ลองใช้คำสั่ง Data→Data Validation เพื่อดูสูตรได้)

การเลือกจังหวัด อำเภอ ตำบล แบบลูกโซ่ (ตัวเลือกแบบที่อยู่แบบ Dependent Dropdown List)
สูตรที่ผูกไว้กับ Data Validation ของตัวเลือกอำเภอ

การคัดลอกไปใช้งาน

ในไฟล์ 20190301_address_autolist.xlsx จะมีชีทชื่อ Provice อยู่ ให้ทำการคัดลอกไปที่ไฟล์ที่เราต้องการจะทำแบบฟอร์ม

Copy ชีท Province ไปไว้ในไฟล์ที่เราต้องการจะใช้งาน

จากนั้นให้ทำการคัดลอกตัวเลือก จังหวัด อำเภอ ตำบล แล้วนำไปวางที่แบบฟอร์มที่เราต้องการจะใช้งาน โดยให้วางไว้ที่ว่าง ๆ เพื่อจะได้ทำการย้ายตัว Droplist ไปวางบนฟอร์มอีกที

ทำการคลิกเลือกพื้นที่ จังหวัด อำเภอ ตำบล แล้ว Copy
วางในไฟล์แบบฟอร์มที่เราต้องการ ตรงไหนก็ได้ที่ว่าง ๆ โปรแกรมจะถามว่าชื่อซ้ำ ต้องการให้ใช้ชื่อในไฟล์ใหม่หรือไม่ ให้เลือก Yes
ขั้นตอนสุดท้ายคือ ย้ายตัว Droplist ไปวางไปบนแบบฟอร์มที่จะใช้งานจริง
เมื่อย้ายเรียบร้อยแล้ว ให้ทดสอบดูว่าใช้งานได้หรือไม่

ดาวน์โหลดไฟล์

หากสนใจจะใช้งาน สามารถดาวน์โหลดไฟล์ไปใช้งานได้เลย

คลิกเพื่อดาวน์โหลดจาก GitHub

คลิกที่ปุ่มดาวน์โหลดมุมบนขวา

การปรับปรุงข้อมูล

เนื่องจากข้อมูล จังหวัด อำเภอ ตำบล ผมเอามาจากเว็บไซต์หน่วยงานรัฐ ซึ่งไม่แน่ใจว่าถูกต้อง 100% หรือไม่ หากพบว่ามีข้อผิดพลาด รบกวนช่วยแจ้งไว้ใน Comment อีเมลมาแจ้ง หรือจะเปิด Issue ใน GitHub ก็ได้ครับ เพื่อผมจะได้ปรับปรุงข้อมูลให้ถูกต้องต่อไป ขอบคุณครับ

ชื่อ List ที่อ้างในสูตรสร้างมาจากไหน

หากใครแกะสูตรดู จะพบว่า ชื่อที่อ้างในสูตร INDIRECT ไม่พบใน Name Manager เลยสงสัยว่ามันอ้างอย่างไร ต้องอธิบายอย่างนี้ครับ ในการสร้าง List สำหรับใช้เลือก อำเภอ และ ตำบล ผู้เขียนใช้วิธีเขียนโปรแกรม VBA ขึ้นมาเพื่อทำการสร้างชื่อให้อัตโนมัติตามตารางในชีท Province เช่น หากเลือกจังหวัดเป็น กรุงเทพมหานคร ใช่ช่องเลือกอำเภอ จากสูตร จากสูตร =INDIRECT("a_" & C7) เมื่อแทน C7 ผลที่ได้คือ =INDIRECT("a_กรุงเทพมหานคร") ซึ่งชื่อ "a_กรุงเทพมหานคร" ถูกสร้างด้วย VBA และซ่อนเอาไว้

แล้วไมผมต้องซ่อนชื่อของ List ที่สร้างขึ้นมา ที่ต้องทำแบบนี้เพราะ หากแสดงชื่อ List ทั้งหมด จะรบกวนการใช้งานปกติทันที เพราะจำนวน List จะเยอะมาก (จำนวนจังหวัด + จำนวนอำเภอ = 77 + 928 = 1,005 ชื่อ) จึงเป็นเหตุผลที่ต้องซ่อนเอาไว้ครับ

หากใครอยากได้ทำแบบนี้ใช้เองโดยไม่ต้องใช้ VBA ในอินเทอร์เน็ตมีคนสอนอยู่แล้วครับ สามารถ Google หาดูได้ ของผู้เขียนเน้นเอาไปใช้งานได้เลยมากกว่าที่จะเน้นให้มาแกะสูตรสร้างใช้เองครับ