Danh sách thả xuống với nhiều lựa chọn

Danh sách thả xuống cổ điển trong trang tính Excel rất tuyệt, nhưng nó chỉ cho phép bạn chọn một tùy chọn từ tập hợp được trình bày. Đôi khi đây chính xác là những gì bạn muốn, nhưng có những tình huống mà người dùng cần có thể chọn một số các yếu tố từ danh sách.

Hãy xem xét một số cách triển khai điển hình của danh sách nhiều lựa chọn như vậy.

Tùy chọn 1. Ngang

Người dùng chọn từng mục từ danh sách thả xuống và chúng xuất hiện ở bên phải ô đang được thay đổi, tự động được liệt kê theo chiều ngang:

Danh sách thả xuống trong các ô C2: C5 trong ví dụ này được tạo theo cách chuẩn, tức là

  1. chọn các ô C2: C5
  2. tab hoặc menu Ngày chọn một đội Xác nhận dữ liệu
  3. trong cửa sổ mở ra, hãy chọn một tùy chọn Danh sách và chỉ định dưới dạng một phạm vi nguồn các ô có dữ liệu nguồn cho danh sách A1: A8

Sau đó, bạn cần thêm macro vào mô-đun trang tính, mô-đun này sẽ thực hiện tất cả công việc chính, tức là thêm các giá trị đã chọn vào bên phải của các ô màu xanh lá cây. Để thực hiện việc này, hãy nhấp chuột phải vào tab trang tính có danh sách thả xuống và chọn lệnh Mã nguồn. Dán mã sau vào cửa sổ trình soạn thảo Visual Basic mở ra:

Private Sub Worksheet_Change (ByVal Target As Range) Khi Lỗi Tiếp tục Tiếp theo Nếu Không Giao nhau (Target, Range ("C2: C5")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False If Len (Target.Offset (0, 1)) = 0 Thì Target.Offset (0, 1) = Target Else Target.End (xlToRight) .Offset (0, 1) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

Nếu cần, hãy thay thế phạm vi nhạy cảm của danh sách thả xuống C2: C5 trong dòng thứ hai của mã này bằng phạm vi của riêng bạn.

Tùy chọn 2. Dọc

Giống như trong phiên bản trước, nhưng các giá trị mới được chọn không được thêm vào bên phải mà ở dưới cùng:

Nó được thực hiện theo cùng một cách, nhưng mã macro của trình xử lý thay đổi một chút:

Private Sub Worksheet_Change (ByVal Target As Range) Khi Lỗi Tiếp tục Tiếp theo Nếu Không Giao nhau (Target, Range ("C2: F2")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False If Len (Target.Offset (1, 0)) = 0 Thì Target.Offset (1, 0) = Target Else Target.End (xlDown) .Offset (1, 0) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

Một lần nữa, nếu cần, hãy thay thế phạm vi nhạy cảm của danh sách thả xuống C2: F2 bằng phạm vi nhạy cảm của bạn trong dòng thứ hai của mã này.

Tùy chọn 3. Với sự tích lũy trong cùng một ô

Trong tùy chọn này, sự tích lũy xảy ra trong cùng một ô có danh sách thả xuống. Các phần tử đã chọn được phân tách bằng bất kỳ ký tự nhất định nào (ví dụ: dấu phẩy):

Danh sách thả xuống trong các ô màu xanh lá cây được tạo theo cách hoàn toàn tiêu chuẩn, như trong các phương pháp trước. Tất cả công việc được thực hiện một lần nữa bằng macro trong mô-đun trang tính:

Private Sub Worksheet_Change(ByVal Target As Range) Khi Lỗi Tiếp tục Tiếp theo Nếu Không Giao nhau (Target, Range("C2:C5")) Is nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False newVal = Target Application.Undo oldval = Target If Len(oldval) <> 0 And oldval <> newVal Then Target = Target & "," & newVal Else Target = newVal End If If Len(newVal) = 0 Then Target.ClearContents Application.EnableEvents = True End If kết thúc phụ  

Nếu muốn, bạn có thể thay thế ký tự phân cách (dấu phẩy) trong dòng mã thứ 9 bằng ký tự của riêng bạn (ví dụ: dấu cách hoặc dấu chấm phẩy).

  • Cách tạo danh sách thả xuống đơn giản trong ô trang tính excel
  • Danh sách thả xuống có nội dung
  • Danh sách thả xuống với các tùy chọn bị thiếu được thêm vào
  • Macro là gì, cách sử dụng chúng, nơi chèn mã macro trong Visual Basic

Bình luận