Tùy thuộc vào các trường hợp, bạn có thể cần chọn nhiều giá trị trong danh sách thả xuống. Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách thực hiện nhiều lựa chọn trong danh sách thả xuống. Đối với phiên này, chúng tôi đang sử dụng Excel 2019, vui lòng sử dụng phiên bản ưa thích của bạn.
Trước khi đi sâu vào phiên, hãy tìm hiểu về tập dữ liệu là cơ sở cho các ví dụ của chúng tôi.
Ở đây chúng tôi có một số yếu tố văn phòng phẩm, sử dụng chúng, chúng tôi sẽ tạo một danh sách thả xuống và chọn nhiều mục ở đó.
Lưu ý rằng đó là một tập dữ liệu đơn giản để giữ mọi thứ đơn giản. Trong một tình huống thực tế, bạn có thể gặp phải một tập dữ liệu phức tạp và lớn hơn nhiều.
Sách bài tập Thực hành
Bạn có thể tải xuống sách bài tập thực hành từ liên kết bên dưới.
Nhiều lựa chọn trong danh sách thả xuống
Trước hết, chúng ta cần tạo một danh sách thả xuống trên cơ sở các văn phòng phẩm của chúng ta. Hãy tạo nó nhanh chóng. Đừng ngần ngại truy cập bài viết về cách tạo danh sách thả xuống.
Trong phần Xác thực dữ liệu hộp thoại chọn DANH SÁCH kiểu dữ liệu và chèn phạm vi ô của các mục.
B4:B11 là phạm vi chứa các yếu tố văn phòng phẩm. Bây giờ bạn sẽ tìm thấy danh sách thả xuống.
Đọc thêm: Danh sách thả xuống của Excel tùy thuộc vào lựa chọn
1. Chọn nhiều mục (Cho phép lựa chọn trùng lặp)
Một danh sách thả xuống thông thường luôn chọn một mục duy nhất. Ở đây bạn có thể thấy, chúng tôi đã chọn Bút từ danh sách (hình ảnh bên dưới).
Bây giờ, nếu chúng tôi chọn một mục khác, hãy giả sử Bút chì
thì nó sẽ thay thế giá trị trước đó. Chỉ Bút chì sẽ vẫn được chọn.
Để chọn nhiều mục, chúng tôi cần sử dụng VBA mã số. Mở Microsoft Visual Basic cho ứng dụng cửa sổ (nhấn ALT + F11 để mở nó).
Bây giờ hãy nhấp đúp vào tên hoặc số trang tính mà bạn muốn chọn nhiều mục trong danh sách thả xuống. Bạn sẽ tìm thấy cửa sổ mã cho trang tính cụ thể đó.
Đây là cửa sổ mã cho Sheet2 trong sổ làm việc của chúng tôi (chúng tôi có danh sách thả xuống trong trang tính này).
Khi cửa sổ mã được mở, hãy chèn mã sau vào đó
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ã và bây giờ hãy thử chọn các giá trị trong danh sách thả xuống.
Đã chọn Bút chì , chúng tôi sẽ chọn một mục khác Máy tính xách tay . Và bạn có thể thấy, chúng tôi đã tìm thấy cả hai mục (hình ảnh bên dưới).
Mã này sẽ cho phép chúng tôi lặp lại lựa chọn. Giả sử nếu chúng ta chọn Bút chì một lần nữa,
chúng tôi sẽ tìm lại mục trong hộp lựa chọn.
Giải thích mã
Chúng tôi đã khai báo hai chuỗi Giá trị cũ và Newvalue .
Bạn có thể thấy chúng tôi đã tạo danh sách thả xuống trong D4 ô, đó là lý do tại sao địa chỉ mục tiêu của chúng tôi là D4 . Ngoài ra, chúng tôi đã kiểm tra lại xem ô có đang sử dụng xác thực dữ liệu hay không bằng cách sử dụng Target.SpecialCells .
Khi một giá trị được chọn, chúng tôi đã tắt các sự kiện (Application.EnableEvents = False
) để các thay đổi không kích hoạt lại sự kiện. Sau đó, lưu mục đã chọn vào Giá trị mới .
Sau khi hoàn tác thay đổi, chúng tôi đã đặt giá trị thành Giá trị cũ . Sau đó, kiểm tra xem Giá trị cũ trống hoặc không. Nếu trống (nghĩa là chỉ một giá trị được chọn), thì trả về Giá trị mới . Nếu không, hãy nối Giá trị cũ và Newvalue .
Trước khi kết thúc, hãy đặt lại sự kiện để chúng tôi có thể thay đổi nếu được yêu cầu.
Đọc thêm: Danh sách thả xuống phụ thuộc nhiều Excel VBA
2. Chọn nhiều mục từ danh sách thả xuống (Chỉ lựa chọn duy nhất)
Trong phần trước, chúng ta đã thấy nhiều lựa chọn cho phép lặp lại. Nếu bạn không muốn điều đó, hãy làm theo phần này.
Để thuận tiện, chúng tôi đã sử dụng một trang tính riêng cho phần trình diễn này. Lần này chúng tôi đang ở Sheet3. Viết mã sau vào cửa sổ mã cho trang tính nà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 & ", " & Newvalue
Else:
Target.Value = Oldvalue
End If
End If
End If
End If
Application.EnableEvents = True
Exitsub:
Application.EnableEvents = True
End Sub
Có sự khác biệt nào so với mã trước đó! Hãy quan sát kỹ hơn, bạn sẽ có thể nhận ra sự khác biệt nhỏ.
Ở đây chúng tôi đã sử dụng VBA hàm được gọi là INSTR . INSTR hàm trả về vị trí của lần xuất hiện đầu tiên của một chuỗi con trong một chuỗi. Truy cập bài viết INSTR này để biết thêm thông tin.
Sử dụng phép toán logic này với InStr (1, Oldvalue, Newvalue) =0, chúng tôi đã kiểm tra xem các giá trị có được tìm thấy hay không. Nếu hoạt động logic trả về TRUE (không tìm thấy trước đó) sau đó nó cho phép chọn mục và nối với giá trị trước đó.
Lưu mã và bây giờ hãy thử chọn một mục đã được chọn.
Ở đây chúng tôi đã chọn Bút chì , nếu chúng tôi muốn chọn lại, chúng tôi không thể. Nó không cho phép các giá trị trùng lặp.
Đọc thêm: Cách tạo danh sách thả xuống từ một trang tính khác trong Excel
3. Chọn các mục trong dòng mới
Cho đến nay, chúng tôi đã tìm thấy các mục được phân tách bằng dấu phẩy. Trong phần này, chúng tôi sẽ sắp xếp các mục đã chọn theo dòng mới.
Để đơn giản, chúng tôi đang hợp nhất một vài ô với D4 tế bào. Để làm điều đó, hãy chọn các ô bạn muốn hợp nhất và nhấp vào Hợp nhất &Căn giữa từ Căn chỉnh phần Trang chủ tab.
Ô sẽ tăng thêm chiều cao.
Bây giờ, hãy xem mã để tách các mục qua dòng mới. Sử dụng mã sau
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
Sự khác biệt duy nhất so với mã trước đó là lần này chúng tôi sử dụng vbNewLine ở giữa OldValue và NewValue .
vbNewLine cung cấp một dòng mới giữa các mục.
Bây giờ hãy chọn các mục.
Chúng tôi chọn một mục Bút điều đó được hiển thị trong hình ảnh trên. Bây giờ hãy chọn một phần tử khác.
Bạn sẽ thấy hai mục này ở các dòng khác nhau.
Ở đây chúng ta có hai giá trị, nằm ở hai dòng khác nhau. Chọn một giá trị khác sẽ thêm giá trị đó vào một dòng khác. Mọi giá trị sẽ nằm trong một dòng mới.
Lưu ý rằng nếu bạn muốn một dấu phân cách khác để phân tách các mục, hãy sử dụng dấu phân cách đó trong dấu ngoặc kép thay cho vbNewline .
Kết luận
Đó là tất cả cho ngày hôm nay. Chúng tôi đã liệt kê một số cách tiếp cận để thực hiện nhiều lựa chọn trong danh sách thả xuống. Hy vọng bạn sẽ thấy điều này hữu ích. Vui lòng bình luận nếu bất cứ điều gì có vẻ khó hiểu. Hãy cho chúng tôi biết bất kỳ phương pháp nào khác mà chúng tôi đã bỏ qua tại đây.
Bài đọc thêm
- Cách tạo danh sách thả xuống ở nhiều cột trong Excel (3 cách)
- Liên kết giá trị ô với danh sách thả xuống trong Excel (5 cách)
- Danh sách thả xuống có điều kiện trong Excel (Tạo, Sắp xếp và Sử dụng)
- Tạo Danh sách Thả xuống Phụ thuộc Động trong Excel
- Cách sử dụng Câu lệnh IF để Tạo Danh sách Thả xuống trong Excel
- VLOOKUP với Danh sách thả xuống trong Excel