---
title: เจาะลึกทุกแง่มุมการทำ Dropdown 2 ชั้น (Ver. ปรับปรุงใหม่)
url: https://www.thepexcel.com/2-step-dropdown-new/
type: post
date: 2016-01-02
updated: 2020-03-30
author: Sira Ekabut
categories: [Excel ทั่วไป]
tags: [data validation, dependent, defined name]
---

# เจาะลึกทุกแง่มุมการทำ Dropdown 2 ชั้น (Ver. ปรับปรุงใหม่)

> ก่อนหน้านี้ผมได้เคยเขียนอธิบายวิธีทำ Dropdown List 2 ชั้น และ 3 ชั้นขึ้นไปแล้ว… หลายๆ คนก็นำไปใช้ประโยชน์ได้เป็นอย่างดี แต่ปัญหาอยู่ที่ บางคนทำตามแล้วมัน Error!! เอ๊ะ แล้วทำไมบางคนทำตามแล้วไม่ Error แต่บางคนทำแล้ว Error ล่ะ? เรามาไขคำตอบกันในบทความนี้ครับ ยาวหน่อย...

ก่อนหน้านี้ผมได้เคยเขียนอธิบายวิธีทำ [Dropdown List 2 ชั้น](https://www.thepexcel.com/dependent-drop-down-list/) และ [3 ชั้นขึ้นไป](https://www.thepexcel.com/3steps-dropdown/)แล้ว… หลายๆ คนก็นำไปใช้ประโยชน์ได้เป็นอย่างดี แต่ปัญหาอยู่ที่ **บางคนทำตามแล้วมัน Error!!**

 

เอ๊ะ แล้วทำไมบางคนทำตามแล้วไม่ Error แต่บางคนทำแล้ว Error ล่ะ? เรามาไขคำตอบกันในบทความนี้ครับ ยาวหน่อย แต่ได้ความรู้มากมาย รับรองเลย!!

 

ใครไม่เคยอ่านบทความ 2 อันก่อนหน้ามาก่อน **สามารถอ่านแค่บทความนี้อันเดียวก็เข้าใจได้ครับ ไม่ต้องย้อนกลับไปอ่านให้เสียเวลา ^^**

 

## หลักการทำ Dropdown

 

Dropdown List เกิดจากการใช้ [Data] –>Data Tools –> Data Validation แล้วเลือก List จากนั้น ให้เลือก Range ที่ต้องการให้เป็น item ย่อยๆ เวลาที่กดปุ่มสามเหลี่ยมเพื่อเลือกใช้ Dropdown แค่นี้ก็จะได้ Dropdown แล้วล่ะ เช่น ผมมีรายชื่อภาพยนต์อยู่ 4 เรื่อง ผมก็แค่ลาก A2:A5 ดังนี้ได้เลย

 

[![dropdown0](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown0.png)](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown0.png)

 

ทีนี้ก็จะได้ Dropdown มาใช้แบบง่ายๆ แล้ว ไม่มีอะไรยากเลยใช่มั้ยครับ ^^

 

[![dropdown3](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown3.png)](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown3.png)

 

### ทำ Dropdown โดยใช้ Define Name ดีกว่า

 

วิธีที่ดีกว่าการเลือก Range ก็คือการใช้ Define Name มาแทน ผมสามารถตั้งชื่อ List 4 เรื่องนั้นใน **Define Name ชื่อ Movies** ได้ ซึ่งมี 2 วิธี คือ

 
1. **ตั้งชื่อใน Name Box** : ลากคลุม 4 เรื่อง (4 ช่อง)แล้วใส่ชื่อใน Name Box
2. **ใช้ Create Names from Selection** : ลากคลุมถึง Heading (5 ช่อง) แล้วกด Ctrl+Shift+F3 เพื่อตั้งชื่อจากช่องบนสุด (หากติ๊ก Top Row อย่างเดียวอยู่แล้วก็กด Ok ได้เลย)ซึ่งในทีนี้ผมขอทำวิธีที่ 2 เพราะความชอบส่วนตัวล้วนๆ  
   
  
  [![dropdown1](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown1.png)](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown1.png)

 

จากนั้นให้ไปที่ Cell ที่ต้องการจะทำ Dropdown แล้วเลือก [Data] –> Data Validation แล้วเลือก List แล้วใส่ชื่อที่ตั้งไว้ลงไป (กด F3 เพื่อช่วยในการเลือกชื่อที่ตั้งไว้แล้วได้)

 

[![dropdown2](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown2.png)](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown2.png)

 

ทีนี้ก็จะได้ Dropdown มาใช้เช่นเดียวกับวิธีแรกเลย แต่แบบนี้เจ๋งกว่าตรงที่แก้ไขตอนหลังง่าย **และเขียนสูตรง่ายกว่าเยอะ ซึ่งเดี๋ยวเราจะทำกันในบทความนี้**

 

[![dropdown3](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown3.png)](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown3.png)

 

## ความยุ่งอยู่ที่ Dropdown ขั้นที่สอง

 

Concept การทำ Dropdown ของเรายังเหมือนเดิม ไม่ว่ามันจะมีกี่ชั้นก็ตาม นั่นคือ ใช้ Define Name มาเป็น item ของ Dropdown นั้น แปลว่า ถ้าเป็น Dropdown ชั้นที่ 2 ก็ต้องใช้ Define Name ที่แทน item ที่จะเป็นตัวเลือกของชั้นที่สอง

 

ความพิเศษอยู่ที่ว่า **Dropdown ตัวที่สองเนี่ย มันสามารถเปลี่ยน item List ไปได้ โดยขึ้นอยู่กับการเลือก Dropdown ตัวแรก **ซึ่งวิธีที่ง่ายที่สุดที่จะทำแบบนี้ได้ ก็คือใช้การเขียนสูตรมาช่วยนั่นเอง

 

แปลว่าเราจะต้องสร้าง Define Name ของ List ชั้นที่ 2 ให้ครบทั้ง 4 List ซะก่อน

 

### สร้าง Define Name ของ List ชั้นที่ 2

 

หากผมลองสร้าง List ที่จะเป็น item ของ Dropdown ชั้นที่สอง โดยใช้ชื่อของ List แทนชื่อหนัง โดยลองคลุมทั้งหมดแล้วกด Ctrl+Shift+F3 แล้วเลือกแค่ Top Row อันเดียว (เพราะใช้ Top Row ในการตั้งเป็นชื่อ)

 

[![dropdown4](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown4.png)](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown4.png)

 

จะได้ผลลัพธ์ออกมาดังนี้

 
- **คอลัมน์ D** ได้ชื่อ** บ้านผีปอป** คือ D2:E12 ซึ่งอันนี้ออกมาปกติ เราใช้ทำงานได้
- **คอลัมน์ E **ได้ชื่อ** Star_Wars** คือ E2:E12 อันนี้ ชื่อดันมีเครื่องหมาย _ โผล่มาแทนช่องว่างซะงั้น
- **คอลัมน์ F** ได้ชื่อ** _13_เกมสยอง** คือ F2:F12 อันนี้ ชื่อดันมีเครื่องหมาย _ โผล่มาหน้าสุด และมี _ แทนช่องว่างด้วย
- **คอลัมน์ F** อันนี้หนักสุดเลย! ไม่มีชื่อ 300 ถูกตั้งขึ้นมาด้วยซ้ำ

 

### ลองทำ Dropdown ชั้นที่สองดู

 

สมมติว่าผมยังไม่สนใจชื่อแปลกๆ ที่โผล่มา… หากผมต้องการทำให้ Dropdown ชั้นที่สองเป็น List ของบ้านผีปอบ ผมก็สามารถใช้ Data Validation แล้วใส่ชื่อโดยกด F3 เลือกได้ดังนี้

 

[![dropdown5](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown5.png)](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown5.png)

 

ทีนี้เนื่องจากชื่อมันต้องเปลี่ยนไปหากผมเปลี่ยนการเลือกของ Dropdown ครั้งแรก แปลว่าผมไม่สามารถใส่ชื่อลงไปตรงๆ ได้ แต่ผมต้องใส่ให้มัน Link กับ Dropdown ชั้นแรก โดยการใส่ว่า =A9 แทน

 

แต่ถ้าเราไปเขียนเป็น =A9 ตรงๆ มันจะได้ผลลัพธ์เป็นคำว่า “บ้านผีปอบ” (ที่เป็น Text ไม่ใช่ Define Name )กลับไปแทน

 

ดังนั้นเราต้องใช้ฟังก์ชั่น INDIRECT มาช่วยแปลง Text ให้เป็น Cell Reference จริงๆ อีกที นั่นคือ =INDIRECT(A9) จึงจะออกมาเป็น **Define Name ที่ชื่อว่า บ้านผีปอบ **จึงจะทำงานได้ (สังเกตว่าผมต้องเลือก Dropdown ชั้นแรกให้มีค่าก่อน ไม่งั้นมันจะขึ้นเตือนว่า Dropdown ชั้นที่2 จะมีปัญหา)

 

[![dropdown6](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown6.png)](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown6.png)

 

ลองเลือกบ้านผีปอบ แล้วเลือก Dropdown ขั้น 2 ซึ่งออกมาใช้งานได้!

 

[![dropdown7](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown7.png)](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown7.png)

 

## ปัญหาเริ่มเกิด

 

แต่ปัญหาที่เกิดขึ้นคือ หากเราเปลี่ยน Dropdown ชั้นแรกเป็น Star Wars แทน คราวนี้ **Excel กลับไม่สามารถใช้งาน Dropdown ชั้นที่สองได้แล้ว!! **(นี่คือปัญหาที่หลายๆ คนอาจจะเจอตอนทำตามที่ผมสอนในบทความเดิมก่อนหน้านี้)

 

[![dropdown8](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown8.png)](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown8.png)

 

สาเหตุเป็นเพราว่า** Excel ไม่สามารถหาชื่อที่เขียนว่า Star Wars ได้นั่นเอง** (เพราะในไฟล์เรามีแต่ชื่อ Star_Wars) นี่แหละคือสาเหตุที่ทำให้หลายคนทำตามผมในตัวอย่างที่แล้ว แต่ทำตามไม่ได้ เกิดปัญหา เพราะว่าชื่อที่ตั้งขึ้นมามันไม่เหมือน Item ที่เลือกในชั้นแรกนั่นเอง

 

**สาเหตุที่ชื่อที่ถูกตั้งขึ้นจริง **(จากการกด Ctrl+Shift+F3)** ไม่เหมือนกับสิ่งที่เราตั้งใจไว้เกิดจากข้อจำกัดของการตั้งชื่อครับ**…

 

ชื่อที่กำลังจะตั้งขึ้นมาใหม่นั้นมีข้อจำกัดดังนี้

 
- **หากมีช่องว่าง** จะถูกแทนที่ด้วย _ 
    - เช่น Star Wars จะกลายเป็น **Stars_Wars** ให้
- **หากขึ้นต้นด้วยตัวเลข** (แต่มี Text ต่อ) จะถูกใส่ _ นำหน้าชื่อให้โดยอัตโนมัติ 
    - เช่น 13 เกมสยอง กลายเป็น **_13_เกมสยอง**
- **หากมีแต่ตัวเลข** ไม่สามารถตั้งชื่อได้เลย 
    - เช่น 300 ไม่สามารถตั้งชื่อได้เลย

 

### ทางแก้ไขทำไง?

 

ทางแก้มีอยู่ 2 วิธีใหญ่ๆ

 
1. **เขียนสูตรแก้ไข** : ตอนที่จะทำ Data Validation ให้เขียนสูตรแปลง item ให้เหมือนกับชื่อที่จะเกิดขึ้นมา เช่น เติมพวก _ ให้โดยอัตโนมัติ 
    - เช่น แทนที่เราจะ INDIRECT(A8) ตรงๆ เราก็ INDIRECT(SUBSTITUTE(A8,” “,”_”)) แทนสิ ก็จะแก้ปัญหาเรื่องการมีช่องว่างได้แล้ว…
    - แต่ถ้ามีขึ้นต้นด้วยตัวเลข ก็ต้องมาเขียนดักอีก เช่นให้เริ่มด้วย _ หากใช้ Left เช็คตัวแรกแล้วเป็นตัวเลข ซึ่งจะเห็นว่าเริ่มยุ่งยากแล้ว
    - ยังไงชื่อ 300 ก็มีปัญหาตั้งชื่อไม่ได้อยู่ดี…
    - ดังนั้นผมจึงอยากแนะนำวิธีที่ 2 ดีกว่า เพราะครอบคลุมแก้ไขได้ทุกกรณี
2. **ตั้งชื่อ Dropdown เป็นคำที่ไม่ติดปัญหา แล้วใช้ VLOOKUP เอา** : แทนที่เราจะตั้งชื่อ Dropdown ชั้นที่ 2 ด้วยชื่อหนัง ซึ่งอาจเปิดปัญหา เราก็ตั้งชื่อกลางๆ ไปเลย เช่น Movie1,Movie2,Movie3… ก็ได้ 
    - ก่อนอื่นลบ Define Name เดิมของ Dropdown ชั้น 2 ทิ้งให้หมดก่อน ด้วย [Formula] –> Name Manager  
       
      
      [![dropdown9](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown9.png)](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown9.png)
    - ตั้งชื่อด้วย Movie1, Movie2, Movie3, Movie4 แทน  
       
      
      [![dropdown10](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown10.png)](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown10.png)
    - สร้างความสัมพันธ์กับ Dropdown ชั้นแรก เพื่อจะใช้ VLOOKUP ได้ภายหลัง  
       
      
      [![dropdown11](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown11.png)](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown11.png)
    - จากนั้นใน Data Validation ของ Dropdown ชั้นที่ 2 เราจะใช้ VLOOKUP มาช่วย Map ข้อมูลว่า item ของ Dropdown ชั้นแรก จะ Link กับ Define Name ของ Dropdown ชั้นที่ 2 ยังไง?  
       
      
      [![dropdown12](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown12.png)](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown12.png)
    - เพียงเท่านี้ Dropdown ชั้นที่ 2 ก็ทำงานได้แล้วทุกกรณี
      
      [![dropdown14](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown14.png)](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown14.png)
    - แม่แต่ 300 ก็ไม่กลัว!  
       
      
      [![dropdown13](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown13.png)](https://www.thepexcel.com/wp-content/uploads/2016/01/dropdown13.png)

 

## วิธีอื่นๆ ในการทำ Dependent Dropdown

 
1. [ใช้ OFFSET ทำ Dropdown กี่ชั้นก็ได้ อ่านรายละเอียดได้ที่นี่](https://www.thepexcel.com/infinity-dependent-dropdown/)
2. [ใช้ Slicer อ่านรายละเอียดได้ที่นี่](https://www.thepexcel.com/slicer-dependent-dropdown/)

---

_Source: [https://www.thepexcel.com/2-step-dropdown-new/](https://www.thepexcel.com/2-step-dropdown-new/)_
