Bạn muốn tạo danh sách tùy chọn trong Excel, nhưng lại cần chúng phụ thuộc lẫn nhau? Ví dụ, chọn Tỉnh/Thành phố thì danh sách Quận/Huyện tương ứng sẽ hiện ra? Bài viết này sẽ hướng dẫn bạn cách thực hiện điều này bằng VBA, giúp bạn thao tác dữ liệu trong Excel hiệu quả hơn.
Trong ví dụ này, chúng ta sẽ tạo hai danh sách: Tỉnh/Thành phố và Quận/Huyện tương ứng. Mục tiêu là khi chọn một Tỉnh/Thành phố, danh sách Quận/Huyện sẽ tự động cập nhật.
Mô tả bài toán tạo danh sách phụ thuộc tỉnh huyện
Tạo Danh Sách Tỉnh/Thành Phố Không Trùng Lặp
Đầu tiên, chúng ta cần tạo danh sách chọn Tỉnh/Thành phố không trùng lặp tại ô F1. Các bước thực hiện như sau:
Lọc dữ liệu không trùng: Lọc dữ liệu Tỉnh/Thành phố ở cột A và đưa kết quả sang cột C. Có nhiều cách để làm điều này, chẳng hạn như sử dụng Advanced Filter hoặc Remove Duplicates. Trong bài viết này, chúng ta sẽ sử dụng Advanced Filter trong VBA.
Minh họa lọc dữ liệu và tạo danh sách chọn
Tạo danh sách chọn: Sử dụng Data Validation để tạo danh sách chọn tại ô F1 dựa trên dữ liệu ở cột C.
Minh họa Data Validation
Code VBA cho Advanced Filter:
Sub Loc_Tinh_TP()
With Sheet1
.Range("A1:A1000").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("C1"), Unique:=True
End With
End Sub
Đoạn code này lọc dữ liệu từ A1 đến A1000 (giả sử dữ liệu của bạn nằm trong khoảng này) và sao chép các giá trị duy nhất sang cột C, bắt đầu từ ô C1.
Tạo Data Validation:
Data Validation cho Tỉnh/Thành phố
Tại ô F1, vào Data > Data Validation. Trong tab Settings, chọn “List” trong mục Allow. Ở mục Source, nhập công thức sau:
=OFFSET(C2,0,0,COUNTA(C2:C1000))
Công thức này tạo một danh sách động dựa trên số lượng Tỉnh/Thành phố trong cột C.
Tạo Danh Sách Quận/Huyện Phụ Thuộc
Tiếp theo, chúng ta sẽ tạo danh sách Quận/Huyện phụ thuộc vào Tỉnh/Thành phố được chọn ở ô F1.
Bước 1: Lọc Quận/Huyện theo Tỉnh/Thành Phố
Mỗi khi thay đổi giá trị tại ô F1, chúng ta cần cập nhật danh sách Quận/Huyện ở cột D. Code VBA dưới đây sẽ thực hiện việc này:
Sub Ma_Huyen_GetData()
Dim i As Long
Dim LastRow As Long
' Xóa dữ liệu cũ trong cột D
Range("D:D").ClearContents
LastRow = 2
For i = 2 To 1000 ' Giả sử dữ liệu của bạn nằm trong khoảng này
If Cells(i, 1).Value = Range("F1").Value Then
Cells(LastRow, 4).Value = Cells(i, 2).Value
LastRow = LastRow + 1
End If
Next i
End Sub
Đoạn code này so sánh giá trị tại ô F1 với cột A và sao chép các Quận/Huyện tương ứng sang cột D.
Để code này chạy mỗi khi thay đổi giá trị ô F1, hãy chèn nó vào module của sheet và sử dụng sự kiện Worksheet_Change:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("F1"), Target) Is Nothing Then
Call Ma_Huyen_GetData
End If
End Sub
Minh họa VBA lọc danh sách phụ thuộc
Bước 2: Tạo Data Validation cho Quận/Huyện
Tương tự như bước tạo danh sách Tỉnh/Thành phố, chúng ta sẽ sử dụng Data Validation cho ô F2:
Kết quả tạo danh sách phụ thuộc
Tại ô F2, vào Data > Data Validation. Trong tab Settings, chọn “List” trong mục Allow. Ở mục Source, nhập công thức:
=OFFSET(D2,0,0,COUNTA(D2:D1000))
Công thức này tạo danh sách động Quận/Huyện dựa trên dữ liệu ở cột D.
Bằng cách này, bạn đã tạo thành công danh sách phụ thuộc động trong Excel bằng VBA. Khi bạn chọn một Tỉnh/Thành phố ở ô F1, danh sách Quận/Huyện ở ô F2 sẽ tự động cập nhật tương ứng.
Discussion about this post