Tùy nhu cầu, bạn muốn chọn nhiều giá trị trong một drop-down list. Hướng dẫn 3 cách làm (Excel 2019, các phiên bản khác tương tự).
Dữ liệu cơ sở: Danh sách văn phòng phẩm.

File Thực Hành
Tải workbook thực hành từ link bên dưới.
Chọn Nhiều Mục Trong Drop-Down List
Tạo drop-down list cơ bản: Data Validation → List → Source: B4:B11.

Đọc thêm: Excel Drop Down List Depending on Selection
1. Chọn Nhiều Mục (Cho Phép Trùng Lặp)
Drop-down thường chỉ chọn 1 mục. Chọn "Pen" → chọn "Pencil" → "Pen" bị thay thế.

Cần VBA để giữ nhiều lựa chọn. Mở VBA (Alt+F11) → double-click sheet chứa drop-down (Sheet2) → dán mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Oldvalue As String
Dim Newvalue As String
On Error GoTo Exitsub
If Target.Address = "$D$4" Then
If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then GoTo Exitsub
Else:
If Target.Value = "" Then GoTo Exitsub
Else
Application.EnableEvents = False
Newvalue = Target.Value
Application.Undo
Oldvalue = Target.Value
If Oldvalue = "" Then
Target.Value = Newvalue
Else
Target.Value = Oldvalue & ", " & Newvalue
End If
End If
End If
Application.EnableEvents = True
Exitsub:
Application.EnableEvents = True
End Sub

Lưu mã → test: Chọn "Pencil" → chọn "Notebook" → cả 2 hiện trong ô, cách nhau dấu phẩy.

Cho phép trùng: Chọn lại "Pencil" → xuất hiện 2 lần.

Giải Thích Mã
- Biến
Oldvalue,Newvaluelưu giá trị cũ/mới. - Target.Address = "$D$4" – ô chứa drop-down.
Application.EnableEvents = False– tránh retrigger event.Application.Undo– lấy giá trị cũ trước khi thay đổi.- Nối chuỗi:
Oldvalue & ", " & Newvalue.
Đọc thêm: Multiple Dependent Drop-Down List Excel VBA
2. Chọn Nhiều Mục (Chỉ Giá Trị Duy Nhất – Không Trùng)
Mã giống hệt nhưng thêm kiểm tra InStr:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Oldvalue As String
Dim Newvalue As String
Application.EnableEvents = True
On Error GoTo Exitsub
If Target.Address = "$D$4" Then
If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then GoTo Exitsub
Else:
If Target.Value = "" Then GoTo Exitsub
Else
Application.EnableEvents = False
Newvalue = Target.Value
Application.Undo
Oldvalue = Target.Value
If Oldvalue = "" Then
Target.Value = Newvalue
Else
If InStr(1, Oldvalue, Newvalue) = 0 Then
Target.Value = Oldvalue & ", " & Newvalue
Else:
Target.Value = Oldvalue
End If
End If
End If
End If
Application.EnableEvents = True
Exitsub:
Application.EnableEvents = True
End Sub

InStr(1, Oldvalue, Newvalue) = 0 – nếu chưa có giá trị mới trong chuỗi cũ thì cho phép thêm.
Test: Đã chọn "Pencil" → chọn lại "Pencil" → không thêm (gif demo).

Đọc thêm: Cách Tạo Drop Down List Từ Sheet Khác Trong Excel
3. Hiển Thị Các Mục Trên Dòng Mới (Newline)
Gộp vài ô với D4 (Merge & Center) để có chiều cao.

Mã dùng vbNewLine thay vì dấu phẩy:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Oldvalue As String
Dim Newvalue As String
Application.EnableEvents = True
On Error GoTo Exitsub
If Target.Address = "$D$4" Then
If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then GoTo Exitsub
Else:
If Target.Value = "" Then GoTo Exitsub
Else
Application.EnableEvents = False
Newvalue = Target.Value
Application.Undo
Oldvalue = Target.Value
If Oldvalue = "" Then
Target.Value = Newvalue
Else
If InStr(1, Oldvalue, Newvalue) = 0 Then
Target.Value = Oldvalue & vbNewLine & Newvalue
Else:
Target.Value = Oldvalue
End If
End If
End If
End If
Application.EnableEvents = True
Exitsub:
Application.EnableEvents = True
End Sub

Kết quả: Mỗi mục trên 1 dòng riêng.

Lưu ý: Thay vbNewLine bằng ký tự khác trong ngoặc kép nếu muốn phân cách khác.
Kết Luận
3 cách chọn nhiều mục drop-down: cho phép trùng, không trùng, xuống dòng. Hy vọng hữu ích. Comment nếu khó hiểu hoặc chia sẻ phương pháp khác.
Đọc Thêm
- Tạo Drop Down List Nhiều Cột Trong Excel (3 Cách)
- Liên Kết Giá Trị Ô Với Drop Down List (5 Cách)
- Conditional Drop Down List Trong Excel
- Tạo Dynamic Dependent Drop Down List
- Dùng IF Statement Tạo Drop-Down List
- VLOOKUP Với Drop Down List