Trong VBA, chúng ta có thể sử dụng Array hoặc Collection để lưu trữ các nhóm của các giá trị. Ví dụ, chúng ta có thể sử dụng chúng để lưu trữ danh sách tên khách hàng, điểm của sinh viên, hoặc danh sách giá trị từ các cell trong một cột.
Dictionary trong VBA lưu trữ dữ liệu dưới dạng cặp key và value, các key không được trùng nhau. Dictionary được sinh ra để lấp đầy 2 khuyết điểm chính của Collection, với Dictionary chúng ta có thể:
- Kiểm tra Key đã tồn tại chưa.
- Có thể thay đổi giá trị của phần tử.
Nội dung chính
1. Add reference "Microsoft Scripting Runtime" (* bắt buộc).
Trước tiên, để sử dụng Dictionary trong VBA, bạn cần phải add reference "Microsoft Scripting Runtime", các bước thực hiện giống như trong bài Collection trong VBA.
2. Hướng dẫn nhanh về việc sử dụng Dictionary trong VBA.
Hàm VLookup trong Excel hoạt động tương tự như một Dictionary. Bạn có thể tra một giá trị dựa trên một key duy nhất.
Dưới đây là bảng hướng dẫn sử dụng nhanh collection trong VBA.
Task | Example |
---|---|
Khai báo và khởi tạo (early binding) |
Dim dict As Scripting.Dictionary Set dict = New Scripting.Dictionary |
Khai báo và khởi tạo (late binding) |
Dim dict As Object Set dict = CreateObject("Scripting.Dictionary") |
Add phần tử mới | dict.Add Key, Value e.g. dict.Add "Apples", 50 |
Chay đổi giá trị của một key. Tự động thêm mới nếu key chưa tồn tại | dict(Key) = Value e.g. dict("Oranges") = 60 |
Lấy ra một giá trị từ dictionary bằng việc sử dụng key | Value = dict(Key) e.g. appleCount = dict("Apples") |
Check key tồn tại | dict.Exists(Key) e.g. If dict.Exists("Apples") Then |
Remove phần tử | dict.Remove Key e.g. dict.Remove "Apples" |
Remove tất cả các phần tử | dict.RemoveAll |
Duyệt các phần tử (For Each) | Dim key As Variant For Each key In dict.Keys Debug.Print key, dict(key) Next key |
Duyệt các phần tử (for loop - chỉ TH early binding) | Dim i As Long For i = 0 To dict.Count - 1 Debug.Print dict.Keys(i), dict.Items(i) Next i |
Lấy số phần tử của dict | dict.Count |
Thiết lập key phân biệt hoa thường (dictionary phải là empty). | dict.CompareMode = vbBinaryCompare |
Thiết lập key không phân biệt hoa thường (dictionary phải là empty). | dict.CompareMode = vbTextCompare |
3. Ví dụ về Dictionary trong VBA.
Dưới đây là ví dụ tra từ điển các loại quả trong tiếng anh bằng việc sử dụng đối tượng Dictionary.
Sub dictionaryExample1() ' khoi tao dictionary dict Dim dict As New Scripting.Dictionary ' thiet lap key khong phan biet hoa thuong dict.CompareMode = vbTextCompare ' add phan tu vao dict dict.Add Key:="Apple", Item:="Qua Tao" dict.Add Key:="Peach", Item:="Qua Dao" dict.Add Key:="Plum", Item:="Qua Man" dict.Add Key:="Orange", Item:="Qua Cam" dict.Add Key:="Lemon", Item:="Qua Chanh" dict.Add Key:="Cucumber", Item:="Qua Dua Chuot" Dim sFruit As String ' Ask user to enter fruit sFruit = InputBox("Enter fruit: ") ' check fruit ma nguoi dung nhap trong dict If dict.Exists(sFruit) Then MsgBox sFruit & " nghia la " & dict(sFruit) Else MsgBox sFruit & " khong ton tai." End If ' xoa dict de giai phong bo nho Set dict = Nothing End Sub
Kết quả:
Nhập "lemon" -> click OK.