Thêm từ điển khóa python

“Kiệt tác vĩ đại nhất trong văn học chỉ là một cuốn từ điển không theo trật tự. ” – Jean Cocteau. Trong bài viết này, Học từ điển Excel Online sẽ hướng dẫn bạn từ VBA  trong Excel  ngay sau đây

Hướng dẫn nhanh về từ điển VBA

Chức năng Tham số Tham chiếu ràng buộc “Microsoft Scripting Runtime” (Add by Tools -> References from menu VB)Khai báo (làm mù sớm)Dim dict As Scripting. DictionaryTạo (Làm mù sớm)Đặt dict = New Scripting. DictionaryKhai báo (Ràng buộc muộn)Dim dict As ObjectTạo (Ràng buộc muộn)Set dict = CreateObject(“Scripting. Từ điển”)Thêm mục (Khóa không tồn tại)dict. Thêm khóa, giá trị e. g. mệnh lệnh. Thêm “Táo”, 50Thay đổi giá trị tại Key. Tự động bổ sung nếu Khóa không tồn tại. dict(Key) = Giá trị e. g. dict(“Oranges”) = 60Nhận giá trị từ điển bằng cách sử dụng Key. Giá trị = dict(Key) e. g. appleCount = dict(“Apples”)Kiểm tra xem Key có tồn tại không. mệnh lệnh. Tồn tại (Khóa) e. g. Nếu chính tả. Tồn tại(“Táo”) ThenXóa Itemdict. Xóa khóa e. g. mệnh lệnh. Xóa “Táo”Xóa tất cả các Itemdict. RemoveAllXem qua tất cả các Mục (cho mỗi vòng lặp)Dim key As Variant For Each key In dict. Phím     Gỡ lỗi. Print key, dict(key) Next keyXem qua tất cả các Item (cho vòng lặp – chỉ ràng buộc sớm)Dim i As Long For i = 0 To dict. Đếm – 1    Gỡ lỗi. In chính tả. Phím(i),      chính tả. Items(i) Next iXem qua tất cả các Item (cho vòng lặp – ràng buộc sớm và muộn)Dim i As Long For i = 0 To dict. Đếm – 1 Gỡ lỗi. In chính tả. Phím () (i), chính tả. Items()(i) Next iNhận số lượng Itemdict. CountĐặt Key phân loại chữ hoa chữ thường (từ phải trống). mệnh lệnh. CompareMode = vbBinaryCompareĐặt Key không phân biệt chữ hoa chữ thường (từ điển phải trống). mệnh lệnh. So sánhMode = vbTextSo sánh

Từ điển VBA là gì?

Trong VBA, chúng ta sử dụng Mảng và Bộ sưu tập để lưu trữ các nhóm giá trị. Ví dụ, chúng ta có thể sử dụng chúng để lưu trữ danh sách tên hàng của khách hàng, điểm của sinh viên hoặc danh sách các giá trị từ một dải ô. Từ điển tương tự như một Bộ sưu tập. Sử dụng cả hai loại, chúng ta có thể đặt tên cho một Mục khi chúng ta thêm nó. Hãy tưởng tượng chúng ta đang lưu trữ số lượng các loại trái cây khác nhau. Chúng ta có thể sử dụng cả Bộ sưu tập và Từ điển như thế này.
' Add to Dictionary
dict.Add Key:="Apple", Item:=5

' Add to Collection
coll.Add Item:=5, Key:="Apple"
1-TỪ ĐIỂN VBA TRONG EXCEL1-TỪ ĐIỂN VBA TRONG EXCELTrong cả hai trường hợp, chúng ta đang lưu trữ giá trị 5 và đặt tên cho nó là “Apple”. Bây giờ chúng ta có thể nhận được giá trị của Apple từ cả hai loại như thế này.
' Get value from Dictionary
Total = dict("Apple")

' Get value from Collection
Total = coll("Apple")
Càng xa càng tốt. Tuy nhiên, Collection có hai nhược điểm chính
  1. Chúng ta không thể kiểm tra xem Key đã tồn tại hay chưa.   
  2. Chúng ta không thể thay đổi giá trị của một mặt hàng hiện có
Các vấn đề đầu tiên khá dễ gặp phải. Kiểm tra khóa bộ sưu tập tồn tại. Thứ hai thì khó hơn. Từ điển VBA không có vấn đề này. Bạn có thể kiểm tra xem Key có tồn tại hay không và bạn có thể thay đổi Item và Key. Ví dụ. chúng ta có thể sử dụng mã sau để kiểm tra xem chúng ta có một mặt hàng tên là Apple hay không.
If dict.Exists("Apple") Then 
    dict("Apple") = 78
Những điều khác biệt này có vẻ rất đơn giản. Tuy nhiên, nó có nghĩa là Từ điển rất hữu ích cho một số nhiệm vụ nhất định. Đặc biệt là khi chúng ta cần lấy giá trị của một mặt hàng

Từ điển trong thực tế

Nếu bạn vẫn chưa hiểu rõ về Từ điển thì hãy làm theo cách này. Một từ điển trên thực tế có một danh sách các Khóa và các Mục. Các Key là các từ và các Mục là định nghĩa. Khi bạn muốn tìm nghĩa của một từ, bạn chuyển thẳng đến từ đó. Bạn không đọc hết mọi Mục trong Từ điển. Một ví dụ thứ hai trong thực tế là một danh bạ điện thoại (bạn có nhớ không?). Nhập trong danh bạ điện thoại là tên \ địa chỉ và mục là số điện thoại. Một lần nữa, bạn sử dụng tổ hợp tên \ địa chỉ để nhanh chóng tìm thấy một số điện thoại. Trong Excel, hàm VLookup hoạt động theo cách tương tự như một Từ điển. Bạn đã tìm kiếm một mặt hàng dựa trên một giá trị duy nhất

Một ví dụ đơn giản về cách sử dụng từ điển VBA

Đoạn mã dưới đây đưa ra một ví dụ đơn giản về cách sử dụng Từ điển. Nó làm như sau
  1. Add the left tree type and a value for each type into Từ điển.   
  2. User has been request input name of a left tree type.   
  3. Mã kiểm tra xem kết quả này có trong Từ điển hay không.   
  4. If have, it will show the left tree name and value.   
  5. Nếu không thì nó sẽ thông báo cho người dùng rằng trái cây không tồn tại
' https://excelmacromastery.com/
Sub CheckFruit()

    ' Select Tools->References from the Visual Basic menu.
    ' Check box beside "Microsoft Scripting Runtime" in the list.
    Dim dict As New Scripting.Dictionary
    
    ' Add to fruit to Dictionary
    dict.Add key:="Apple", Item:=51
    dict.Add key:="Peach", Item:=34
    dict.Add key:="Plum", Item:=43

    Dim sFruit As String
    ' Ask user to enter fruit
    sFruit = InputBox("Please enter the name of a fruit")

    If dict.Exists(sFruit) Then
        MsgBox sFruit & " exists and has value " & dict(sFruit)
    Else
        MsgBox sFruit & " does not exist."
    End If
    
    Set dict = Nothing
    
End Sub
Đây là một ví dụ đơn giản nhưng nó cho thấy từ điển hữu ích như thế nào. Chúng ta sẽ xem một ví dụ thực hiện ở phần sau của bài viết. Vui lòng xem xét các điều chỉnh cơ bản của việc sử dụng Từ điển

Create dictionary

Để sử dụng Từ điển, trước hết bạn cần thêm thư viện
  1. Chọn Tools -> References từ menu Visual Basic.   
  2. Tìm Microsoft Scripting Runtime trong danh sách và đánh dấu vào hộp bên cạnh nó
Chúng ta khai báo một từ điển như sau.
Dim dict As New Scripting.Dictionary
Hay 
Dim dict As Scripting.Dictionary
Set dict = New Scripting.Dictionary
Tạo từ điển theo cách này được gọi là “Early Binding”. Ngoài ra còn có “Late Binding”. Please see this thing has mean is what

Ràng buộc sớm và muộn

Để tạo từ điển bằng cách sử dụng Late Binding, chúng ta sử dụng đoạn mã sau. Chúng tôi không cần thêm tham chiếu.
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
Về mặt kỹ thuật Early binding có nghĩa là chúng ta quyết định chính xác những gì chúng ta đang sử dụng từ trước. Với ràng buộc muộn, quyết định này được thực hiện khi ứng dụng đang chạy. Nói một cách dễ hiểu, sự khác biệt là
  1. Liên kết sớm cần có thư viện mà chúng tôi chọn ở Công cụ Tham khảo. Ràng buộc muộn thì không.  
  2. Liên kết sớm cho phép truy cập vào *Intellisense- chức năng gợi ý khi viết mã/lập trình. Ràng buộc muộn thì không.   
  3. Liên kết sớm có thể yêu cầu bạn thêm thủ công Tham chiếu vào “Microsoft Scripting Runtime” cho một số người dùng
(*Intellisense là tính năng hiển thị cho bạn những người thủ tục và thuộc tính có sẵn của một Mục khi bạn đang nhập. ) Mặc dù Microsoft khuyên bạn nên sử dụng liên kết sớm trong hầu hết các trường hợp, nhưng tôi sẽ khác. Một nguyên tắc chung là ràng buộc sớm khi phát triển mã để bạn có quyền truy cập vào Intellisense. Sử dụng ràng buộc muộn khi phân phối mã cho người dùng khác để ngăn chặn các lỗi xung đột thư viện khác nhau xảy ra. Thêm các Item vào từ điểnChức năngParamsVí dụAddKey, Itemdict. Add “Apples”, 50 The ta can add items into dictionary by add function. Các mục cũng có thể được bổ sung bằng cách gán một giá trị mà chúng ta sẽ xem xét trong phần tiếp theo. Chúng ta hãy xem chức năng Add before. Hàm Add có hai tham số. Key và Item. Cả hai đều là tham số bắt buộc. Trong ví dụ bổ sung đầu tiên ở trên, chúng ta sử dụng tên tham số. Bạn không cần phải làm điều này mặc dù nó có thể hữu ích khi bạn bắt đầu.
dict.Add Key:="Orange", Item:=45
dict.Add "Apple", 66
dict.Add "12/12/2015", "John"
dict.Add 1, 45.56
Key may be any type of data. Item could be any type of data, a object (Object), array (Array), bộ sưu tập (Collection) or even more as a dictionary (Từ điển). Vì vậy, bạn có thể có một Từ điển của Từ điển, Mãng và Bộ sưu tập. Nhưng hầu hết thời gian nó sẽ là một giá trị (ngày, số hoặc văn bản). Nếu chúng ta thêm một Key đã tồn tại trong Từ điển thì chúng ta sẽ gặp lỗi2-TỪ ĐIỂN VBA TRONG EXCEL2-TỪ ĐIỂN VBA TRONG EXCELOạn mã sau sẽ đưa ra lỗi này
dict.Add Key:="Orange", Item:=45

' This line gives an error as key exists already
dict.Add Key:="Orange", Item:=75

Chỉ định một giá trị

Hoạt động Định dạngVí dụGán giá trị cho một khóa trong Từ điển (Từ điển)Dictionary(Key) = Itemdict(“Oranges”) = 60 Chúng ta có thể thay đổi giá trị của khóa bằng đoạn mã sau
dict("Orange") = 75
Gán giá trị cho Khóa theo cách này có một . Nếu Khóa không tồn tại, nó sẽ tự động bổ sung Khóa và Mục từ điển. Điều này sẽ hữu ích khi bạn có một danh sách các mục đã được sắp xếp và chỉ muốn nhập mục cuối cùng cho mỗi mục.
' Get value from Dictionary
Total = dict("Apple")

' Get value from Collection
Total = coll("Apple")
0 Đừng quên rằng bạn có thể tải xuống tất cả mã VBA được sử dụng trong bài đăng này từ đầu hoặc cuối bài đăng

Kiểm tra Key tồn tại

Chức năngParamentsVí dụExistsKeyIf dict. Exists(“Apples”) Then The ta could used used function Exists to check check xem Key có tồn tại trong từ điển hay không.
' Get value from Dictionary
Total = dict("Apple")

' Get value from Collection
Total = coll("Apple")
1

Lưu trữ nhiều giá trị trong Key

Please view bên dưới dữ liệu mẫu. Chúng ta muốn lưu trữ Số tiền và Mục cho mỗi ID khách hàng. Từ điển chỉ lưu trữ một giá trị để chúng ta có thể làm gì? . Cách tốt nhất để làm điều đó là sử dụng Class Module. Đoạn mã sau đây cho thấy cách chúng ta có thể thực hiện điều này.
' Get value from Dictionary
Total = dict("Apple")

' Get value from Collection
Total = coll("Apple")
2_______13Bạn có thể thấy rằng bằng cách sử dụng Mô-đun Lớp, chúng ta có thể lưu trữ bao nhiêu trường tùy thích. Ví dụ 2 và 3 ở cuối bài đăng cho thấy cách sử dụng mô-đun lớp với Từ điển

Các chức năng hữu ích khác

Chức năng Tham sốVí dụCountN/Adict. ĐếmRemoveKeydict. Xóa “Táo”Xóa aN/Addict. Hàm RemoveAllBa trong bảng thực hiện như sau
  1. Count – return item in Dictionary.   
  2. Remove – loại bỏ một Key nhất định trong Từ điển.   
  3. RemoveAll – xóa tất cả các mục trong Từ điển
Phần phụ sau đây cho thấy một ví dụ về cách bạn sẽ sử dụng các hàm này.
' Get value from Dictionary
Total = dict("Apple")

' Get value from Collection
Total = coll("Apple")
4 Hãy nhớ rằng bạn có thể tải xuống tất cả các ví dụ mã từ bài đăng. Chỉ cần chuyển đến phần tải xuống ở trên cùng

Key và chữ hoa chữ thường

Một số chuỗi hàm trong VBA có vbCompareMethod. Điều này được sử dụng cho các hàm so sánh các chuỗi. Nó được sử dụng để xác định xem trường hợp của các chữ cái có quan trọng hay không. Từ điển sử dụng một phương pháp tương tự. Thuộc tính So sánh Chế độ của từ điển được sử dụng để xác định xem trường hợp của các khóa có quan trọng hay không. Theinstallation is. vbTextSo sánh. Chữ hoa và chữ thường được coi là giống nhau. vbBinarySo sánh. Chữ hoa và chữ thường coi như khác nhau. This is default. Với Từ điển, chúng ta có thể sử dụng các cài đặt này để xác định xem trường hợp của các khóa có quan trọng hay không.
' Get value from Dictionary
Total = dict("Apple")

' Get value from Collection
Total = coll("Apple")
5Lần này chúng ta sử dụng vbTextCompare có nghĩa là trường hợp không thành vấn đề.
' Get value from Dictionary
Total = dict("Apple")

' Get value from Collection
Total = coll("Apple")
6Lưu ý. Từ điển phải trống khi bạn sử dụng thuộc tính CompareMode, nếu không bạn sẽ gặp lỗi. "Cuộc gọi thủ tục không hợp lệ hoặc đối số"

Những điều cần chú ý

vbBinarySo sánh (trường hợp quan trọng) được mặc định và điều này có thể dẫn đến các lỗi nhỏ. Ví dụ. hãy tưởng tượng bạn có dữ liệu sau trong ô A1 đến B2. Orange, 5 orange, 12 Đoạn mã sau sẽ tạo hai khóa – bật cho “Orange” và một cho “orange”. Điều này tinh tế vì sự khác biệt duy nhất là trường hợp của chữ cái đầu tiên.
' Get value from Dictionary
Total = dict("Apple")

' Get value from Collection
Total = coll("Apple")
7Nếu bạn sử dụng vbTextCompare cho cùng một dữ liệu, bạn sẽ gặp lỗi khi cố gắng thêm khóa thứ hai vì nó coi “Orange” và “orange” giống nhau.
' Get value from Dictionary
Total = dict("Apple")

' Get value from Collection
Total = coll("Apple")
8Nếu bạn sử dụng phương pháp gán thì nó không tính đến chế độ So sánh. Vì vậy, đoạn mã sau vẫn sẽ thêm hai khóa mặc dù CompareMode được đặt thành vbTextCompare.
' Get value from Dictionary
Total = dict("Apple")

' Get value from Collection
Total = coll("Apple")
9

Đọc qua từ điển

Chúng ta có thể đọc qua tất cả các mục trong Từ điển. Chúng ta có thể xem qua các phím bằng cách sử dụng vòng lặp For Each. Sau đó, chúng ta sử dụng key hiện tại để truy cập một mục.
If dict.Exists("Apple") Then 
    dict("Apple") = 78
0 Chúng ta cũng có thể lặp lại các phím mặc dù tính năng này chỉ hoạt động với Early Binding (Bản cập nhật tháng 2 năm 2020. Trong Office 365, tính năng này hiện hoạt động với cả hai phiên bản).
If dict.Exists("Apple") Then 
    dict("Apple") = 78
1Phương pháp này hoạt động với ràng buộc ràng buộc sớm và muộn.
If dict.Exists("Apple") Then 
    dict("Apple") = 78
2Sắp xếp Từ điển Đôi khi bạn có thể muốn sắp xếp Từ điển theo kew hoặc theo giá trị. Từ điển không có chức năng sắp xếp nên bạn phải tự tạo. Tôi đã viết hai hàm sắp xếp – một để sắp xếp theo khóa và một để sắp xếp theo giá trị

Sắp xếp theo key

To sorting dictionary by key, you could use the chức năng SortDictionaryByKey bên dưới. Hàm công khai SortDictionaryByKey(dict As Object _                   , Thứ tự sắp xếp tùy chọn As XlSortOrder = xlAscending) As Object     Dim arrList As Object     Set arrList = CreateObject(“System. bộ sưu tập. ArrayList”)     ‘ Đặt các khóa trong ArrayList     Phím mờ dưới dạng Biến thể, đối chiếu dưới dạng Bộ sưu tập mới     Đối với mỗi khóa Trong dict         arrList. Thêm khóa     Khóa tiếp theo     ‘ Sắp xếp khóa     arrList. Sắp xếp     ‘ Đối với thứ tự giảm dần, hãy đảo ngược     Nếu sortorder = xlDescending Thì         arrList. Đảo ngược     Kết thúc nếu     ‘ Tạo từ điển mới     Dim dictNew làm đối tượng     Đặt dictNew = CreateObject(“Scripting. Dictionary”)     ‘ Đọc qua các khóa được sắp xếp và thêm vào từ điển mới     Đối với mỗi khóa Trong arrList dictNew. Thêm khóa, dict(key)     Phím tiếp theo     ‘ Dọn dẹp     Đặt arrList = Không có gì     Đặt dict = Không có gì     ‘ Trả lại từ điển mới     Đặt SortDictionaryByKey = dictNew End Function Đoạn mã dưới đây để bạn thấy cách sử dụng SortDictionaryByKey
If dict.Exists("Apple") Then 
    dict("Apple") = 78
3

Sắp xếp theo giá trị

Để sắp xếp từ điển theo các giá trị, bạn có thể sử dụng hàm SortDictionaryByValue bên dưới. ‘ https. // excelmacromastery. com/ Public Function SortDictionaryByValue(dict As Object _                     , Thứ tự sắp xếp tùy chọn As XlSortOrder = xlAscending) As Object     On Error GoTo eh     Dim arrayList As Object     Set arrayList = CreateObject(“System. bộ sưu tập. ArrayList”)     Dim dictTemp As Object     Set dictTemp = CreateObject(“Scripting. Dictionary”)     ' Đặt các giá trị trong ArrayList và sắp xếp     ' Lưu trữ các giá trị trong tempDict với các khóa của chúng dưới dạng một bộ sưu tập     Khóa mờ dưới dạng Biến thể, giá trị Dưới dạng Biến thể, đối chiếu Dưới dạng Bộ sưu tập     Đối với mỗi khóa Trong dict         value = dict(key)         ' nếu giá trị không' . tồn tại(giá trị) = Sai Sau đó             ‘ tạo bộ sưu tập để giữ khóa             ‘ – cần thiết cho các giá trị trùng lặp              Đặt coll = Bộ sưu tập mới              dictTemp. Thêm giá trị, coll             ‘ Thêm giá trị             arrayList. Thêm giá trị         End If         ‘ Thêm khóa hiện tại vào bộ sưu tập dictTemp(value). Thêm khóa     Khóa tiếp theo     ‘ Sắp xếp giá trị     ArrayList. Sắp xếp     ‘ Đảo ngược nếu giảm dần     Nếu thứ tự sắp xếp = xlGiảm dần Thì         arrayList. Đảo ngược     Kết thúc Nếu     dict. RemoveAll     ‘ Đọc qua ArrayList và thêm các giá trị cũng như các khóa     ‘ tương ứng từ mục dictTemp               Dim dưới dạng biến thể     Đối với mỗi giá trị trong ArrayList         Đặt coll = dictTemp(value)         Đối với mỗi mục trong coll dict. Thêm mục, giá trị         Mục tiếp theo     Giá trị tiếp theo     Đặt arrayList = Không có gì     ‘ Trả lại từ điển mới     Đặt SortDictionaryByValue = dict Xong. Thoát Chức năng eh. Nếu sai. Con số = 450 Rồi         Ơr. Tăng vbObjectError + 100, “SortDictionaryByValue” _                 , “Không thể sắp xếp từ điển nếu giá trị là một đối tượng”     End If End Function Đoạn mã dưới đây hướng dẫn bạn cách sử dụng SortDictionaryByValue

Giải quyết sự cố từ điển

Phần này bao gồm các biến phổ biến lỗi mà bạn có thể gặp phải khi sử dụng Từ điển

Reference

Sự cố. Bạn nhận được thông báo lỗi “Loại do người dùng xác định không được xác định” Điều này thường xảy ra khi bạn tạo Từ điển nhưng quên thêm tham chiếu.
If dict.Exists("Apple") Then 
    dict("Apple") = 78
4Giải pháp. Chọn Tools->Reference từ menu Visual Basic. Đánh dấu vào hộp bên cạnh “Microsoft Scripting Runtime”. Xem Phần. Create dictionary

Tồn tại không hoạt động

Sự cố. Bạn đã thêm một khóa vào Từ điển nhưng khi bạn sử dụng hàm Exists, nó trả về false Đây thường là một vấn đề với Phân biệt chữ hoa chữ thường (xem ở trên).
If dict.Exists("Apple") Then 
    dict("Apple") = 78
5Đoạn mã sau thêm “Apple” làm phím. Khi chúng ta kiểm tra “apple”, nó sẽ trả về false. Điều này là do nó tính đến trường hợp của các chữ cái. Bạn có thể đặt thuộc tính CompareMode thành vbTextCompare và điều này sẽ loại bỏ trường hợp.
If dict.Exists("Apple") Then 
    dict("Apple") = 78
6Giải pháp. Set CompareMode to vbTextCompare to bỏ qua trường hợp hoặc đảm bảo dữ liệu của bạn là đúng trường hợp. Xem Phần. Key and Phân biệt chữ hoa chữ thường

Error icon

Sự cố. Bạn đã nhận được thông báo lỗi “Biến đối tượng hoặc Không đặt biến khối” khi bạn cố gắng sử dụng Từ điển. Điều thường xảy ra khi bạn quên sử dụng Mới trước khi sử dụng Từ điển. Ví dụ, đoạn mã sau sẽ gây ra lỗi này
If dict.Exists("Apple") Then 
    dict("Apple") = 78
7Giải pháp. Sử dụng Từ khóa mới khi tạo Từ điển
If dict.Exists("Apple") Then 
    dict("Apple") = 78
4Hay 
Dim dict As Scripting.Dictionary
Set dict = New Scripting.Dictionary
Xem phần. Create dictionary

hữu ích để giải từ điển

Nếu bạn đang điều tra một vấn đề với Từ điển, có thể hữu ích khi xem nội dung. Use code after to In each Key and Item to Immediate Window (Ctrl + G).
' https://excelmacromastery.com/
Sub CheckFruit()

    ' Select Tools->References from the Visual Basic menu.
    ' Check box beside "Microsoft Scripting Runtime" in the list.
    Dim dict As New Scripting.Dictionary
    
    ' Add to fruit to Dictionary
    dict.Add key:="Apple", Item:=51
    dict.Add key:="Peach", Item:=34
    dict.Add key:="Plum", Item:=43

    Dim sFruit As String
    ' Ask user to enter fruit
    sFruit = InputBox("Please enter the name of a fruit")

    If dict.Exists(sFruit) Then
        MsgBox sFruit & " exists and has value " & dict(sFruit)
    Else
        MsgBox sFruit & " does not exist."
    End If
    
    Set dict = Nothing
    
End Sub
0Bạn có thể sử dụng nó như thế này
' https://excelmacromastery.com/
Sub CheckFruit()

    ' Select Tools->References from the Visual Basic menu.
    ' Check box beside "Microsoft Scripting Runtime" in the list.
    Dim dict As New Scripting.Dictionary
    
    ' Add to fruit to Dictionary
    dict.Add key:="Apple", Item:=51
    dict.Add key:="Peach", Item:=34
    dict.Add key:="Plum", Item:=43

    Dim sFruit As String
    ' Ask user to enter fruit
    sFruit = InputBox("Please enter the name of a fruit")

    If dict.Exists(sFruit) Then
        MsgBox sFruit & " exists and has value " & dict(sFruit)
    Else
        MsgBox sFruit & " does not exist."
    End If
    
    Set dict = Nothing
    
End Sub
1Nếu bạn đang xem qua mã, bạn cũng có thể thêm chính tả. Đếm vào Cửa sổ xem để xem có bao nhiêu mục hiện có trong Từ điển. Chuột phải vào bất kỳ đâu trong cửa sổ mã và chọn Thêm đồng hồ. Nhập lệnh. Đếm vào hộp văn bản và nhấp vào Ok. You can also use the main Dictionary from Watch. Thêm Dict vào cửa sổ Watch. Nếu bạn nhấp vào dấu cộng, bạn sẽ thấy nội dung của Từ điển. Điều này có thể hữu ích nhưng nó chỉ hiển thị khóa chứ không hiển thị mục   Lưu ý. You only can see Watch when the running code. Hãy nhớ rằng bạn có thể tải xuống tất cả các ví dụ mã từ bài đăng. Chỉ cần chuyển đến phần tải xuống ở trên cùng

Sao chép từ điển vào một mảng

Như chúng ta biết từ điển được tạo thành từ các cặp Key và Value. Từ điển có thuộc tính Các phím là một mảng của tất cả các phím và các thuộc tính Các mục là một mảng của tất cả các mục (tức là giá trị). Vì cả hai thuộc tính này đều là mảng, chúng ta có thể ghi chúng trực tiếp vào một trang tính như chúng ta sẽ thấy trong phần tiếp theo. Nếu chúng ta muốn sao chép các phím hoặc mục sang một mảng mới, thì chúng ta có thể làm điều đó rất dễ dàng như sau. ________ 32 Ví dụ sau đây sao chép các phím mảng và các mục sang các mảng mới. Sau đó, nội dung của các mảng mới được đưa vào Cửa sổ tức thì.
' https://excelmacromastery.com/
Sub CheckFruit()

    ' Select Tools->References from the Visual Basic menu.
    ' Check box beside "Microsoft Scripting Runtime" in the list.
    Dim dict As New Scripting.Dictionary
    
    ' Add to fruit to Dictionary
    dict.Add key:="Apple", Item:=51
    dict.Add key:="Peach", Item:=34
    dict.Add key:="Plum", Item:=43

    Dim sFruit As String
    ' Ask user to enter fruit
    sFruit = InputBox("Please enter the name of a fruit")

    If dict.Exists(sFruit) Then
        MsgBox sFruit & " exists and has value " & dict(sFruit)
    Else
        MsgBox sFruit & " does not exist."
    End If
    
    Set dict = Nothing
    
End Sub
3Khi mã được chạy, bạn sẽ nhận được kết quả sau. Lưu ý rằng bạn chỉ có thể sao chép các mục khi nó chứa các kiểu dữ liệu cơ bản như chuỗi, dài, ngày, kép, v. v. Nếu các mục là đối tượng thì bạn không thể sao chép chúng vào một mảng. Thay vào đó, bạn cần đọc qua từ điển bằng cách sử dụng một vòng lặp

Viết từ điển vào trang tính

Chúng ta có thể ghi các phím hoặc mục Từ điển vào trang tính trong một dòng mã. Khi bạn viết ra các phím hoặc mục, chúng sẽ được ghi thành một hàng. Nếu bạn muốn ghi chúng vào một cột, bạn có thể sử dụng hàm WorksheetFunction. chuyển vị. ________ 34 Đoạn mã bên dưới hiển thị các ví dụ về cách ghi Từ điển vào trang tính

Ví dụ hữu ích về từ điển

Cách dễ nhất để thấy được lợi ích của Từ điển là xem một số ví dụ thực tế về việc sử dụng nó. Vì vậy, trong phần này chúng ta sẽ xem xét một số ví dụ. Bạn có thể lấy cửa sổ đang làm việc và mã cho các ví dụ này bằng cách nhập email của bạn vào bên dưới

Ví dụ 1 – Tổng giá trị đơn

Vui lòng xem một ví dụ thực tế về việc sử dụng từ. Data of them ta for example this is the Chung kết World Cup from year 2014. Nhiệm vụ của chúng ta ở đây là lấy số bàn thắng ghi được của mỗi đội. Điều đầu tiên chúng ta cần làm là đọc tất cả dữ liệu. Đoạn mã sau đọc qua tất cả các trận đấu và theo tên của hai đội tham gia. Điều chúng ta muốn làm bây giờ là lưu trữ từng đội và những bàn thắng mà chúng ghi được. Khi chúng ta gặp một đội lần đầu tiên, chúng ta sẽ thêm tên làm Key và số bàn thắng làm Item. Nếu đội đã được thêm vào thì chúng ta sẽ cộng tổng số bàn thắng mà họ đã ghi được trong trận đấu hiện tại. Chúng ta có thể sử dụng dòng sau để thêm mục tiêu cho đội hiện tại. Dòng này rất mạnh. Nếu các đội tồn tại trong Từ điển, các bàn thắng hiện có được thêm vào tổng số bàn thắng hiện có của đội đó. Nếu đội không tồn tại trong Từ điển thì nó sẽ tự động thêm đội vào Từ điển và đặt giá trị cho các mục tiêu. Ví dụ, hãy tưởng tượng Từ điển có một mục nhập Key, Value Brazil, 5 Sau đó sẽ cập nhật từ điển để bây giờ nó trông giống như thế này Key, Value Brazil, 8 France, 3 Điều này giúp chúng ta không phải viết . Chúng ta viết các giá trị từ điển vào trang tính như sau. ‘ Ghi dữ liệu từ từ điển vào trang tính ‘ https. // excelmacromastery. com/vba-dictionary Private Sub WriteDictionary(dict As Scripting. Dictionary _                     , shReport As Worksheet)     ClearData shReport     ‘ Viết khóa     shReport. Phạm vi (“A1”). Thay đổi kích thước (dict. Đếm, 1). Giá trị = WorksheetFunction. Chuyển đổi (dict. Keys)         ‘ Viết các mục     shReveport. Phạm vi (“B1”). Thay đổi kích thước (dict. Đếm, 1). Giá trị = WorksheetFunction. Chuyển đổi (dict. Items) End Sub Chúng ta rõ ràng muốn sắp xếp số điểm. It is easy more than more to read by this way. Không có cách nào dễ dàng để sắp xếp một Từ điển. Cách thực hiện là sao chép tất cả các mục vào một mảng. Sắp xếp mảng và sao chép các mục trở lại Từ điển. Những gì chúng ta có thể làm là sắp xếp dữ liệu khi nó được ghi vào trang tính. Chúng ta có thể sử dụng mã sau để thực hiện công việc này. Sub GetTotals cuối cùng của chúng trông như thế này. Khi bạn chạy mã này, bạn sẽ nhận được kết quả sau

Ví dụ 2 – Xử lý nhiều giá trị

Chúng ta sẽ sử dụng dữ liệu từ nhiều giá trị ở trên. Hãy tưởng tượng dữ liệu này bắt đầu tại ô A1. Sau đó, chúng ta có thể sử dụng đoạn mã dưới đây để đọc vào từ điển. Mã này bao gồm hai mục đã đăng ký để hiển thị dữ liệu
  1. WriteToImmediate in content of dictionary to Immediate Window.  
  2. WriteToWorksheet ghi nội dung của từ điển vào trang tính được gọi là Đầu ra
To run this ví dụ
  1. Tạo một trang tính có tên là Khách hàng.   
  2. Thêm dữ liệu vào trang tính bắt đầu từ ô A1.   
  3. Tạo một trang tính có tên là Đầu ra và để trống.  
  4. Đi tới Visual Basic Editor(Alt + F11).   
  5. Chọn Tools->Reference và sau đó chọn “Microsoft Scripting Runtime” từ danh sách.   
  6. Tạo một lớp mô-đun mới và thêm đoạn mã đầu tiên từ bên dưới.   
  7. Tạo một mô-đun tiêu chuẩn mới và thêm đoạn mã thứ hai từ bên dưới.   
  8. Click F5 to run and select Main from menu.   
  9. Kiểm tra mmediateWindow (Ctrl + G) và trang tính Đầu ra để xem kết quả

Ví dụ 3 – Tính tổng nhiều giá trị

Trong ví dụ này, chúng tôi sẽ thực hiện một bản cập nhật nhỏ cho Ví dụ 2. Trong ví dụ đó, chỉ có một mục nhập cho mỗi khách hàng trong dữ liệu. Lần này sẽ có nhiều mục nhập cho một số khách hàng và chúng tôi muốn tính tổng số tiền và tổng số mục cho từng khách hàng. Xem bản cập nhật dữ liệu bên dưới. Lưu ý. Nếu bạn chạy mã “Ví dụ 2” trên dữ liệu có nhiều bản sao của CustomerID, nó sẽ thông báo lỗi “Lỗi đã tồn tại khóa”. Khi nào bạn sử dụng từ điển Vậy khi nào bạn nên sử dụng VBA Dictionary?
  1. You have a list of the target item, ví dụ. quốc gia, số hóa đơn, tên và địa chỉ khách hàng, id dự án, tên sản phẩm, v. v.  
  2. Bạn cần truy xuất giá trị của một mặt hàng duy nhất