Đối tượng từ điển VBA

Sử dụng từ điển VBA

Từ điển VBA hoạt động theo cách tương tự như đối tượng tập hợp, nhưng nó có nhiều thuộc tính và phương thức hơn, đồng thời cung cấp tính linh hoạt hơn

Từ điển lưu dữ liệu trong bộ nhớ và có thể dễ dàng thao tác. Không cần tính toán tự động, sao lưu nền và làm mới màn hình, vì vậy mã của bạn sẽ chạy nhanh hơn đáng kể.

Đối tượng từ điển hoạt động theo cách tương tự như một từ điển thông thường mà bạn sẽ sử dụng nếu muốn tìm hiểu nghĩa của một từ. Mỗi mục nhập trong đối tượng từ điển có giá trị "key" và giá trị "item". Bạn sử dụng 'key' giá trị khóa để tra cứu giá trị mục trong đối tượng từ điển, theo cách tương tự như bạn sẽ sử dụng từ điển thông thường.

Do cách thức hoạt động của đối tượng từ điển, các giá trị khóa phải là duy nhất, giống như trong từ điển thông thường. Hãy tưởng tượng nếu bạn mở từ điển thông thường của mình để tra nghĩa của một từ và thấy từ đó được liệt kê nhiều lần với hai định nghĩa hoàn toàn khác nhau. Bạn sẽ rất bối rối!

Giá trị khóa thường là văn bản hoặc số hoặc cả hai. Người dùng thường thấy dễ nhớ tên các phím dưới dạng văn bản hơn là chỉ số.

So với một đối tượng bộ sưu tập, đối tượng bộ sưu tập chỉ được đọc. Nó chỉ có hai phương thức (Thêm và Loại bỏ) và hai thuộc tính (Đếm và Mục). Sau khi một mục đã được thêm vào một đối tượng bộ sưu tập, nó chỉ có thể được gỡ bỏ chứ không thể chỉnh sửa, đây là một thủ tục rườm rà nếu giá trị của một mục cần được thay đổi.

Đối tượng từ điển sẽ tự động thay đổi kích thước để phù hợp với số lượng mục bên trong nó. Nó không cần phải được xác định về kích thước, giống như một mảng thông thường

Đối tượng từ điển là một chiều và kiểu dữ liệu là 'Biến thể', vì vậy bất kỳ kiểu dữ liệu nào cũng có thể được nhập vào nó, ví dụ: số, văn bản, ngày tháng

Từ điển VBA không có nguồn gốc từ Excel và cần được truy cập bằng liên kết sớm hoặc muộn khi xác định đối tượng từ điển

123 Sub EarlyBindingExample ()Làm mờ MyDictionary như một kịch bản mới.DictionaryKết thúc Sub
1234 Sub LateBindingExample ()Làm mờ MyDictionary dưới dạng đối tượngĐặt MyDictionary = CreateObject ("Scripting.Dictionary")Kết thúc Sub

Nếu bạn sử dụng liên kết sớm, bạn phải thêm tham chiếu vào thư viện ‘Microsoft Scripting Runtime’

Bạn thực hiện việc này bằng cách chọn ‘Công cụ | Tham chiếu ’trên thanh menu của cửa sổ Visual Basic Editor (VBE) và một cửa sổ bật lên sẽ xuất hiện với danh sách các thư viện có sẵn.

Cuộn xuống ‘Microsoft Scripting Runtime’ và chọn hộp bên cạnh. Nhấp vào OK và thư viện này hiện là một phần của dự án VBA của bạn và có thể được tham chiếu bằng cách sử dụng liên kết sớm. Tất cả các ví dụ về mã trong bài viết này sẽ sử dụng liên kết sớm.

Mã của bạn sẽ chạy nhanh hơn đáng kể với liên kết sớm, vì tất cả đều được biên dịch trước. Với ràng buộc muộn, đối tượng phải được biên dịch khi mã chạy

Thư viện Scripting Runtime có ‘Intellisense’. Khi bạn viết mã của mình, bạn sẽ thấy danh sách các phương thức và thuộc tính có sẵn xuất hiện, điều này giúp tránh mắc lỗi chính tả, điều này sẽ gây ra lỗi trong chương trình của bạn

Ngoài ra, nếu bạn nhấn F2 trong VBE và chọn thư viện ‘Scripting’, bạn sẽ thấy tất cả các phương thức và thuộc tính có sẵn, và các tham số cần thiết cho mỗi

Phân phối ứng dụng Excel của bạn có chứa từ điển

Như đã chỉ ra, thư viện Scripting Runtime không phải là một phần của Excel VBA, vì vậy nếu bạn phân phối ứng dụng của mình cho những người dùng khác, họ phải có quyền truy cập vào thư viện Scripting Runtime trên máy tính của họ. Nếu không, thì lỗi sẽ xảy ra.

Bạn nên bao gồm một số mã VBA để kiểm tra xem thư viện này có hiện diện khi ứng dụng Excel của bạn được tải hay không. Bạn có thể sử dụng lệnh ‘Dir’ để thực hiện việc này trong sự kiện ‘Workbook Open’

Vị trí của tệp là C: \ Windows \ SysWOW64 \ scrrun.dll

Phạm vi của một đối tượng từ điển

Đối tượng Từ điển chỉ khả dụng khi sổ làm việc Excel đang mở. Nó không được lưu khi sổ làm việc được lưu.

Nếu từ điển của bạn có sẵn cho tất cả các quy trình trong mô-đun của bạn, bạn cần khai báo nó (Dim) trong phần Khai báo ở đầu mô-đun

Bạn xác định nó như một đối tượng toàn cục nếu bạn muốn từ điển của mình được sử dụng trong toàn bộ mã của bạn.

1 Global MyDictionary As New Dictionary

Nhập và đọc từ điển của bạn

Để bắt đầu, bạn cần tạo một từ điển, điền vào nó một số dữ liệu, sau đó lặp qua nó để chứng minh rằng dữ liệu tồn tại

1234567891011 Sub PopulateReadDictionary ()Làm mờ MyDictionary như một kịch bản mới.DictionaryMyDictionary.Add "MyItem1", 10MyDictionary.Add "MyItem2", 20MyDictionary.Add "MyItem3", 30Đối với n = 0 Đến MyDictionary.Count - 1MsgBox MyDictionary.Keys (n) & "" & MyDictionary.Items (n)Tiếp theo nKết thúc Sub

Mã này tạo một đối tượng từ điển mới có tên là ‘MyDictionary’ và sau đó điền vào nó ba mục. Phương thức Add có hai tham số - Key và Item và cả hai đều là bắt buộc

Các kiểu dữ liệu cho Khóa và Mục đều là biến thể nên chúng sẽ chấp nhận bất kỳ loại dữ liệu nào - số, văn bản, ngày tháng, v.v.

Mục đầu tiên trong từ điển có thể được thêm vào là:

1 MyDictionary.Add 10, "MyItem1"

Các giá trị đã được đảo ngược giữa Khóa và Mục, nhưng điều này sẽ vẫn hoạt động, mặc dù khóa tìm kiếm bây giờ sẽ trở thành 10.

Tuy nhiên, điều quan trọng là phải hiểu rằng giá trị khóa là giá trị tra cứu trong từ điển. Nó hoạt động theo cách rất giống với hàm Vlookup trong Excel. Bởi vì tất cả các khóa phải có giá trị duy nhất, bạn có thể chỉ định một giá trị khóa và ngay lập tức trả về giá trị mục cho khóa đó.

Lưu ý rằng chỉ mục từ điển bắt đầu từ 0, vì vậy bạn cần trừ 1 từ số lượng từ điển được sử dụng trong vòng lặp For… Next

Bạn cũng có thể sử dụng vòng lặp For… Each để đọc các giá trị trong từ điển:

1234567891011 Sub PopulateReadDictionary ()Dim MyDictionary as New Scripting.Dictionary, I As VariantMyDictionary.Add "MyItem1", 10MyDictionary.Add "MyItem2", 20MyDictionary.Add "MyItem3", 30Cho Mỗi Tôi Trong MyDictionary.KeysMsgBox I & "" & MyDictionary (I)Tiếp theo tôiKết thúc Sub

Mã này sẽ lặp lại qua từng mặt hàng và hiển thị khóa mặt hàng và giá trị mặt hàng

Sử dụng số chỉ mục mặt hàng

Bạn có thể sử dụng số chỉ mục của một khóa hoặc mục để đọc giá trị

123456789101112 Số chỉ mục phụ ()Làm mờ MyDictionary như một kịch bản mới.DictionaryMyDictionary.CompareMode = TextCompareMyDictionary.Add "Item1", 10MyDictionary.Add "Item2", 20MyDictionary.Add "Item3", 30MsgBox MyDictionary.Keys (2)MsgBox MyDictionary.Items (1)Kết thúc Sub

Mã này sẽ trả về khóa ‘item3’ khi chỉ mục bắt đầu từ 0 và giá trị item 20

Bạn có thể tham khảo các giá trị khóa hoặc mục riêng lẻ trong bộ sưu tập Khóa hoặc Mục bằng cách sử dụng số chỉ mục.

Lọc từ điển

Không có một phương pháp trực tiếp nào để thực hiện việc này, nhưng nó khá đơn giản để viết mã để thực hiện nó:

1234567891011 Sub FilterDictionary ()Làm mờ MyDictionary như một kịch bản mới.DictionaryMyDictionary.Add "AAItem1", 10MyDictionary.Add "BBItem2", 20MyDictionary.Add "BBItem3", 30Đối với Mỗi Tôi Trong Bộ lọc (MyDictionary.Keys, "BB")MsgBox MyDictionary.Item (I)Tiếp theo tôiKết thúc Sub

Giá trị bộ lọc chỉ hoạt động từ đầu giá trị khóa. Bạn không thể sử dụng các ký tự đại diện trong bộ lọc. Mã này sẽ trả về hai giá trị mặt hàng có tên khóa bắt đầu bằng ‘BB’

Điều này sẽ cung cấp cho bạn một tập hợp con của từ điển dựa trên giá trị bộ lọc của bạn, sau đó bạn có thể chuyển sang một từ điển khác hoặc một trang tính. Với việc lập kế hoạch cẩn thận về các tên chính, đảm bảo rằng có một tiền tố có nghĩa cho mỗi tên, bạn sẽ dễ dàng chia từ điển thành các phần thành phần khác nhau.

Thay đổi giá trị vật phẩm của khóa

Đối tượng từ điển có một lợi thế lớn so với một bộ sưu tập ở chỗ có thể thay đổi giá trị mục, ví dụ:

1 MyDictionary ("MyItem4") = "40"

Trong bộ sưu tập, bạn cần xóa mục nhập đó và sau đó tạo lại.

Đây là một ví dụ về mã:

12345678910111213 Sub PopulateReadDictionary ()Làm mờ MyDictionary như một kịch bản mới.DictionaryMyDictionary.Add "MyItem1", 10MyDictionary.Add "MyItem2", 20MyDictionary.Add "MyItem3", 30MyDictionary ("MyItem2") = "25"MyDictionary ("MyItem4") = "40"Đối với n = 0 Đến MyDictionary.Count - 1MsgBox MyDictionary.Keys (n) & "" & MyDictionary.Items (n)Tiếp theo nKết thúc Sub

Đoạn mã trên thiết lập ba mục trong từ điển, sau đó thay đổi giá trị của ‘MyItem2’ từ 20 thành 25.

Nó cũng thay đổi giá trị của ‘MyItem4’ thành 40. Lưu ý rằng trong các câu lệnh thêm của mã, không có ‘MyItem4’ nào được thêm vào. Khi bạn thay đổi giá trị của một khóa không tồn tại, nó sẽ tự động được tạo. Điều này cực kỳ thuận tiện, vì không có lỗi nào được kích hoạt, nhưng nó có nghĩa là bạn cần phải cẩn thận với các tên khóa của mình. Một lỗi chính tả vô ý trong tên khóa có nghĩa là một khóa mới được tạo và tên khóa ban đầu sẽ vẫn có giá trị cũ.

Điều này có thể dễ dàng dẫn đến các vấn đề về tính toàn vẹn trong đối tượng từ điển.

Kiểm tra xem khóa có tồn tại không

Bạn có thể kiểm tra xem giá trị khóa có tồn tại trong từ điển hay không

123456789 Sub CheckExistsDictionary ()Làm mờ MyDictionary như một kịch bản mới.DictionaryMyDictionary.Add "MyItem1", 10MyDictionary.Add "MyItem2", 20MyDictionary.Add "MyItem3", 30MsgBox MyDictionary.Exists ("MyItem8")Kết thúc Sub

Mã thêm ba mục vào một đối tượng từ điển mới, sau đó kiểm tra khóa (‘MyItem8’) không có trong từ điển. Điều này trả về False, nhưng đã sử dụng một trong các khóa hiện có, nó sẽ trả về True

Ký tự đại diện không được chấp nhận. Văn bản tìm kiếm cũng phân biệt chữ hoa chữ thường theo mặc định, nhưng điều này có thể được thay đổi (xem phần sau của bài viết)

Sử dụng nhiều giá trị trong từ điển

Không giống như một mảng, đối tượng từ điển chỉ là một chiều. Điều này có thể dẫn đến sự cố nếu bạn có một số giá trị mà bạn muốn đặt vào một khóa.

Một cách để làm tròn điều này là nối mỗi giá trị mục bằng cách sử dụng một ký tự phân cách ở giữa mỗi giá trị, ví dụ: ‘|’

12345678910111213141516171819202122232425262728293031323334 Sub MultipleValues ​​()'Tạo đối tượng từ điển và các biếnLàm mờ MyDictionary dưới dạng kịch bản mới.Dictionary, V1 dưới dạng số nguyên, V2 dưới dạng chuỗiDim V3 As Date, Temp As String, N As Integer'Điền 3 biến để chứng minh nhiều giá trịV1 = 5V2 = "Ví dụ về nhiều giá trị"V3 = "22-07-2020"'Thêm giá trị được nối vào từ điển bằng cách sử dụng "|" dấu phân cáchMyDictionary.Add "MyMultipleItem", V1 & "|" & V2 & "|" & V3 & "|"'Chụp giá trị từ điển được nối từ từ điển vào một biếnTemp = MyDictionary ("MyMultipleItem")'Lặp lại qua chuỗi được nối để tách các giá trị riêng lẻLàm'Tìm vị trí của dấu phân cáchN = InStr (Nhiệt độ, "|")'Nếu không còn dấu phân cách, vòng lặp Do thoátNếu N = 0 thì Thoát Do'Hiển thị văn bản liên quan đến vị trí của dấu phân cách được tìm thấyMsgBox Left (Nhiệt độ, N - 1)'Cắt ngắn chuỗi được nối với ký tự tiếp theo sau khi dấu phân cách được tìm thấyNhiệt độ = Giữa (Nhiệt độ, N + 1)VòngKết thúc Sub

Một cách khác để giải quyết vấn đề này là thiết kế hệ thống kịch bản phụ của riêng bạn cho các tên khóa. Không có lý do gì bạn không nên sử dụng dấu ngoặc và số trong tên khóa

1234567891011 Sub MultipleValues ​​()Làm mờ MyDictionary như một kịch bản mới.DictionaryMyDictionary.Add "Multiple (1)", 5MyDictionary.Add "Nhiều (2)", "Ví dụ về nhiều giá trị"MyDictionary.Add "Multiple (3)", "22-07-2020"Đối với N = 1 đến 3MsgBox MyDictionary ("Nhiều (" & N & ")")N tiếp theoKết thúc Sub

Mã này thêm ba khóa vào từ điển, nhưng mỗi tên khóa chứa một số tập lệnh phụ trong dấu ngoặc. Sau đó, bạn có thể tham chiếu đến tên khóa, nhưng sử dụng số tập lệnh con được nối vào. Điều này rất giống với việc sử dụng một đối tượng mảng

Xóa các mục

Bạn có thể xóa từng mục riêng lẻ bằng cách tham chiếu đến giá trị khóa

1 MyDictionary.Remove (“MyItem2”)

Lưu ý rằng vì các tên khóa là duy nhất, điều này chỉ xóa một khóa và giá trị mục cụ thể đó

Bạn cũng có thể xóa hoàn toàn từ điển

1 MyDictionary.RemoveAll

Dưới đây là một ví dụ về việc sử dụng ‘Xóa’ trong VBA:

12345678910111213141516 Sub RemoveValues ​​()Làm mờ MyDictionary như một kịch bản mới.DictionaryMyDictionary.Add "Item1", 10MyDictionary.Add "Item2", 20MyDictionary.Add "Item3", 30MyDictionary.Remove ("Lặp lại 2")Đối với N = 0 Đến MyDictionary.Count - 1MsgBox MyDictionary.Keys (N) & "" & MyDictionary.Items (N)N tiếp theoMyDictionary.RemoveAllMsgBox MyDictionary.CountKết thúc Sub

Mã thêm ba mục vào từ điển, sau đó loại bỏ 'Lặp lại 2'. Sau đó, nó lặp qua từ điển để chứng minh rằng ‘Lặp lại 2’ không còn tồn tại

Cuối cùng, mã loại bỏ tất cả các mục trong từ điển và hiển thị số lượng từ điển, bây giờ là số không.

Thay đổi độ phân biệt chữ hoa chữ thường cho các tìm kiếm

Nếu bạn thực hiện tìm kiếm một khóa, nó sẽ phân biệt chữ hoa chữ thường theo mặc định. Tuy nhiên, bạn có thể sử dụng thuộc tính ‘CompareMode’ để thay đổi điều này.

Lưu ý rằng điều này phải được thực hiện ngay lập tức trong mã sau khi bạn tạo đối tượng từ điển, nhưng trước khi bạn thêm bất kỳ dữ liệu nào vào từ điển. Khi chế độ so sánh đã được đặt, bạn không thể thay đổi chế độ này trong từ điển đó.

12345678910 Sub ChangeCaseSensitive ()Làm mờ MyDictionary như một kịch bản mới.DictionaryMyDictionary.CompareMode = TextCompareMyDictionary.Add "Item1", 10MyDictionary.Add "Item2", 20MyDictionary.Add "Item3", 30MsgBox MyDictionary.Exists ("item2")Kết thúc Sub

Trong ví dụ này, chế độ so sánh được đặt thành ‘TextCompare’ có nghĩa là nó không phân biệt chữ hoa chữ thường. Câu lệnh 'Exists' ở cuối ví dụ sẽ trả về True, mặc dù thực tế là văn bản tìm kiếm đều ở dạng chữ thường.

Trong Excel chỉ có hai giá trị có thể được sử dụng cho chế độ so sánh. So sánh nhị phân phân biệt chữ hoa chữ thường và So sánh văn bản không phân biệt chữ hoa chữ thường

Nếu bạn đã đặt chế độ so sánh thành So sánh nhị phân, bạn cần phải cẩn thận khi đặt tên cho các khóa của mình. Nếu bạn đặt tên có chữ hoa làm ký tự đầu tiên, thì khi thay đổi giá trị, bạn phải đảm bảo rằng bạn vẫn đặt ký tự đầu tiên là chữ hoa. Nếu bạn bắt đầu bằng một ký tự viết thường, điều này sẽ được hiểu là một khóa mới và có thể dễ dàng dẫn đến nhầm lẫn và lỗi trong từ điển của bạn

Hãy nhớ rằng nếu bạn thay đổi giá trị cho một khóa và tên khóa không tồn tại do So sánh nhị phân đang được sử dụng, một khóa và giá trị mới sẽ được thêm vào từ điển.

Nếu bạn sử dụng So sánh văn bản thay thế, thì bất kỳ thay đổi giá trị nào sẽ được chuyển đến khóa bất kể chữ hoa và chữ thường. Nếu bạn cố gắng thêm cùng một mục nhưng được viết bằng một ký tự chữ hoa chữ thường khác, bạn sẽ gặp lỗi vì nó đã tồn tại.

Sắp xếp từ điển

Đối với đối tượng bộ sưu tập, không có phương pháp nào được cung cấp để có thể sắp xếp từ điển, bằng cách sử dụng các khóa hoặc giá trị mục.

Tuy nhiên, vì mã VBA nằm trong sổ làm việc Excel, dữ liệu từ điển có thể được chuyển sang Excel dưới dạng bảng và sau đó có thể áp dụng cơ sở sắp xếp Excel cho nó. Sau đó, từ điển có thể được xóa bằng cách sử dụng ‘RemoveAll’ và các giá trị đã sắp xếp được thêm vào từ trang tính.

Mã này sẽ sắp xếp cả khóa và giá trị mục

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 Sub SortMyDictionary ()Dim MyDictionary As New DictionaryDim Counter As Long'Xây dựng từ điển với các mục thứ tự ngẫu nhiênMyDictionary.Add "Item5", 5MyDictionary.Add "Item2", 15MyDictionary.Add "Item4", 11MyDictionary.Add "Item1", 2MyDictionary.Add "Item3", 19'Ghi lại số lượng mục trong từ điển để sử dụng trong tương laiCounter = MyDictionary.Count'Lặp lại thông qua từ điển sao chép từng khóa và mục vào một ô liên tiếp trên' Trang tính1 '(cột A)Đối với N = 0 Đến MyDictionary.Count - 1Trang tính ("Trang 1"). Ô (N + 1, 1) = MyDictionary.Keys (N)Trang tính ("Trang 1"). Ô (N + 1, 2) = MyDictionary.Items (N)N tiếp theo'Kích hoạt Sheet1 và sử dụng quy trình sắp xếp Excel để sắp xếp dữ liệu theo thứ tự tăng dầnTrang tính ("Trang 1"). Kích hoạtPhạm vi ("A1: B" & MyDictionary.Count). ChọnActiveWorkbook.Worksheets ("Sheet1"). Sắp xếp.SortFields.ClearActiveWorkbook.Worksheets ("Sheet1"). Sort.SortFields.Add2 Key: = Range (_"A1: A5"), SortOn: = xlSortOnValues, Order: = xlAscending, DataOption: = _xlSortNormalVới ActiveWorkbook.Worksheets ("Sheet1"). Sắp xếpDải .SetRange ("A1: A5").Header = xlGuess.MatchCase = Sai.Orientation = xlTopToBottom.SortMethod = xlPinYin.Ứng dụngKết thúc với'Xóa tất cả các mục khỏi từ điểnMyDictionary.RemoveAll'Sao chép các giá trị ô trở lại đối tượng từ điển trống bằng cách sử dụng giá trị được lưu trữ (Bộ đếm) cho vòng lặp'Đối với N = 1 để truy cậpMyDictionary.Add Sheets ("Sheet1"). Cells (N, 1) .Value, Sheets ("Sheet1"). Cells (N, 2) .ValueN tiếp theo'Lặp lại từ điển để chứng minh thứ tự các mục hiện đang ởĐối với N = 0 Đến MyDictionary.Count - 1MsgBox MyDictionary.Keys (N) & "" & MyDictionary.Items (N)N tiếp theo'Xóa trang tính (Sheet1) - nếu cần, hãy xóa luônTrang tính ("Trang 1"). Phạm vi (Ô (1, 1), Ô (Bộ đếm, 2)). XóaKết thúc Sub

Mã này tạo một từ điển với năm giá trị thứ tự ngẫu nhiên được thêm vào. Nó nắm bắt số lượng mục vào một biến, sau đó lặp qua từ điển, chuyển các giá trị khóa và mục thành các cột riêng biệt trên trang tính.

Sau đó, nó sắp xếp phạm vi đã tải xuống, sử dụng cột A làm trường sắp xếp. Từ điển được xóa hoàn toàn bằng cách sử dụng phương thức ‘RemoveAll’ và sau đó, mã sẽ lặp qua các giá trị ô trong trang tính để thêm chúng trở lại từ điển.

Cuối cùng, mã lặp qua từ điển, hiển thị các giá trị khóa và mục được nối với nhau để chứng minh rằng việc sắp xếp đã hoạt động.

Bằng cách thay đổi các tham số trong mã sắp xếp, dữ liệu có thể được sắp xếp theo giá trị mục.

Sao chép một danh sách các phím vào một trang tính

Bạn có thể sao chép danh sách tất cả các giá trị chính vào một trang tính bằng cách sử dụng mã sau:

12345678910 Sub CopyKeyList ()Làm mờ MyDictionary như một kịch bản mới.DictionaryMyDictionary.CompareMode = TextCompareMyDictionary.Add "Item1", 10MyDictionary.Add "Item2", 20MyDictionary.Add "Item3", 30Trang tính ("Trang tính1"). Phạm vi ("A1"). Giá trị = Tham gia (MyDictionary.Keys, vbLf)Kết thúc Sub

Điều này sẽ tạo ra kết quả trong trang tính của bạn:

Bạn có thể sao chép toàn bộ từ điển vào một trang tính bằng cách sử dụng mã này:

12345678910 Sub CopyIntoWorksheet ()Làm mờ MyDictionary như một kịch bản mới.DictionaryMyDictionary.Add "Item1", 10MyDictionary.Add "Item2", 20MyDictionary.Add "Item3", 30Phạm vi ("A1"). Thay đổi kích thước (MyDictionary.Count, 1) = WorksheetFunction.Transpose (MyDictionary.Keys)Phạm vi ("B1"). Thay đổi kích thước (MyDictionary.Count, 1) = WorksheetFunction.Transpose (MyDictionary.Items)Kết thúc Sub

Trang tính của bạn sẽ trông như thế này:

So sánh Từ điển với Bộ sưu tập

Từ điển nhanh hơn một bộ sưu tập.

Bộ sưu tập đã có trong VBA. Một từ điển cần một tham chiếu đến Microsoft Scripting Dictionary để được thêm vào hoặc một đối tượng được tạo bằng cách sử dụng liên kết muộn

Một mục Bộ sưu tập chỉ có thể được viết một lần và đọc nhiều lần. Trong Từ điển, giá trị mục có thể được thay đổi. Với Bộ sưu tập, mục phải được xóa và sau đó mục đã thay đổi được thêm lại.

Bộ sưu tập hoạt động trên các giá trị chỉ mục, có thể khó tìm ra giá trị chỉ mục nào thuộc về nơi nào. Từ điển hoạt động dựa trên các giá trị khóa duy nhất được sử dụng để định vị một mục

Việc truy xuất một mục trong Bộ sưu tập lớn chậm hơn so với trong Từ điển

Trong Bộ sưu tập, các khóa chỉ được sử dụng để tra cứu dữ liệu và không thể truy xuất được. Trong từ điển, các khóa có thể được kiểm tra về sự tồn tại và có thể được sử dụng để tìm một mục cụ thể.

Bộ sưu tập có phân biệt chữ hoa chữ thường và điều này không thể thay đổi. Trong Từ điển, chế độ so sánh có thể được đặt để phân biệt chữ hoa chữ thường hoặc không phân biệt chữ hoa chữ thường

Trong Bộ sưu tập, các giá trị khóa phải là chuỗi. Trong Từ điển, chúng có thể là bất kỳ kiểu dữ liệu nào, ví dụ: số, ngày, v.v.

Xóa tất cả các mục trong Bộ sưu tập bao gồm việc xác định lại đối tượng Bộ sưu tập. Từ điển có phương thức ‘RemoveAll’ cho việc này.

Bạn sẽ giúp sự phát triển của trang web, chia sẻ trang web với bạn bè

wave wave wave wave wave