VBA Sözlüğü Kullanma
Bir VBA sözlüğü, bir koleksiyon nesnesine benzer şekilde çalışır, ancak daha fazla özelliği ve yöntemi vardır ve daha fazla esneklik sunar.
Sözlük, verileri bellekte saklar ve kolayca değiştirilebilir. Otomatik hesaplama, arka plan yedekleme ve ekran yenileme gerekmez, bu nedenle kodunuz çok daha hızlı çalışır.
Sözlük nesnesi, bir kelimenin anlamını öğrenmek istediğinizde kullanacağınız normal bir sözlüğe benzer şekilde çalışır. Sözlük nesnesindeki her girişin bir "anahtar" değeri ve bir "öğe" değeri vardır. Klasik bir sözlük kullandığınıza benzer şekilde, sözlük nesnesindeki öğe değerini aramak için anahtar değeri "anahtarını" kullanırsınız.
Sözlük nesnesinin çalışma şekli nedeniyle, anahtar değerlerin tümü, geleneksel bir sözlükte olduğu gibi benzersiz olmalıdır. Bir kelimenin anlamını aramak için geleneksel sözlüğünüzü açtığınızı ve kelimenin birden fazla tamamen farklı iki tanımla listelendiğini hayal edin. Kafanız çok karışacaktı!
Anahtar değerler genellikle metin veya sayılar veya her ikisidir. Kullanıcılar genellikle tuşların adlarını yalnızca sayılar yerine metin olarak hatırlamayı daha kolay bulur.
Bir koleksiyon nesnesiyle karşılaştırıldığında, koleksiyon nesnesi salt okunurdur. Yalnızca iki yöntemi (Ekle ve Kaldır) ve iki özelliği (Sayı ve Öğe) vardır. Bir koleksiyon nesnesine bir öğe eklendikten sonra, yalnızca kaldırılabilir, ancak düzenlenemez; bu, bir öğenin değerinin değiştirilmesi gerekiyorsa zahmetli bir prosedürdür.
Bir sözlük nesnesinin boyutu, içindeki öğe sayısına uyacak şekilde otomatik olarak değişecektir. Geleneksel bir dizi gibi boyut olarak tanımlanmasına gerek yoktur.
Sözlük nesnesi tek boyutludur ve veri türü 'Varyant'tır, bu nedenle herhangi bir veri türü buna girilebilir; sayısal, metin, tarih
VBA sözlüğü, Excel'e özgü değildir ve sözlük nesnesi tanımlanırken erken veya geç bağlama ile erişilmesi gerekir.
123 | Sub EarlyBindingExample()Dim MyDictionary As New Scripting.DictionaryAlt Bitiş |
1234 | Alt Geç BağlamaÖrnek()Dim MyDictionary As ObjectMyDictionary = CreateObject("Scripting.Dictionary") olarak ayarlayınAlt Bitiş |
Erken bağlamayı kullanırsanız, "Microsoft Komut Dosyası Çalıştırma Zamanı" kitaplığına bir başvuru eklemelisiniz.
Bunu, 'Araçlar | Referanslar' Visual Basic Düzenleyici (VBE) penceresinin menü çubuğunda ve kullanılabilir kitaplıkların bir listesini içeren bir açılır pencere görünecektir.
'Microsoft Komut Dosyası Çalışma Zamanı'na gidin ve yanındaki kutuyu işaretleyin. Tamam'ı tıkladığınızda bu kitaplık artık VBA projenizin bir parçasıdır ve erken bağlama kullanılarak referans alınabilir. Bu makaledeki tüm kod örneklerinde erken bağlama kullanılacaktır.
Tümü önceden derlendiğinden, kodunuz erken bağlama ile önemli ölçüde daha hızlı çalışacaktır. Geç bağlama ile, kod çalışırken nesnenin derlenmesi gerekir
Komut Dosyası Çalıştırma Zamanı kitaplığında "Intellisense" bulunur. Kodunuzu yazarken, programınızda hatalara neden olacak yazım hatalarını önlemeye yardımcı olan mevcut yöntemlerin ve özelliklerin listesini göreceksiniz.
Ayrıca, VBE içinde F2'ye basarsanız ve 'Komut Dosyası' kitaplığını seçerseniz, mevcut tüm yöntemleri ve özellikleri ve her biri için gereken parametreleri göreceksiniz.
Sözlük İçeren Excel Uygulamanızı Dağıtma
Daha önce belirtildiği gibi, Komut Dosyası Çalıştırma Zamanı kitaplığı Excel VBA'nın bir parçası değildir, bu nedenle uygulamanızı diğer kullanıcılara dağıtırsanız, bilgisayarlarındaki Komut Dosyası Çalıştırma Zamanı kitaplığına erişimleri olmalıdır. Olmazlarsa, bir hata meydana gelir.
Excel uygulamanız yüklendiğinde bu kitaplığın mevcut olup olmadığını kontrol etmek için bazı VBA kodlarını eklemek iyi bir fikirdir. Bunu 'Çalışma Kitabı Aç' etkinliğinde yapmak için 'Dir' komutunu kullanabilirsiniz.
Dosyanın konumu C:\Windows\SysWOW64\scrrun.dll'dir.
Sözlük Nesnesinin Kapsamı
Sözlük nesnesi yalnızca Excel çalışma kitabı açıkken kullanılabilir. Çalışma kitabı kaydedildiğinde kaydedilmez.
Sözlüğünüz modülünüzdeki tüm rutinler için kullanılabilir olacaksa, modülün en üstündeki Bildir bölümünde onu (Dim) bildirmeniz gerekir.
Sözlüğünüzün kodunuz boyunca kullanılmasını istiyorsanız, onu global bir nesne olarak tanımlarsınız.
1 | Global MyDictionary As New Dictionary |
Sözlüğünüzden Doldurma ve Okuma
Başlangıç olarak, bir sözlük oluşturmanız, bazı verilerle doldurmanız ve ardından verilerin var olduğunu kanıtlamak için yinelemeniz gerekir.
1234567891011 | Sub PopulateReadDictionary()Dim MyDictionary As New Scripting.DictionaryMyDictionary.Add "MyItem1", 10MyDictionary."MyItem2" ekleyin, 20MyDictionary."MyItem3" ekleyin, 30n = 0 için MyDictionary.Count'a - 1MsgBox MyDictionary.Keys(n) & " " & MyDictionary.Items(n)sonraki nAlt Bitiş |
Bu kod, 'Sözlüğüm' adında yeni bir sözlük nesnesi oluşturur ve ardından onu üç öğeyle doldurur. Add yönteminin iki parametresi vardır - Anahtar ve Öğe ve her ikisi de gereklidir
Anahtar ve Öğe için veri türlerinin her ikisi de değişkendir, bu nedenle sayısal, metin, tarih vb. her türlü veriyi kabul ederler.
Sözlükteki ilk madde şu şekilde eklenebilir:
1 | MyDictionary.Add 10, "MyItem1" |
Anahtar ve Öğe arasındaki değerler tersine çevrildi, ancak arama anahtarı artık 10 olmasına rağmen bu yine de işe yarayacak.
Ancak, anahtar değerin sözlükteki arama değeri olduğunu anlamak önemlidir. Excel'deki DÜŞEYARA işlevine çok benzer bir şekilde çalışır. Tüm anahtarların benzersiz değerlere sahip olması gerektiğinden, bir anahtar değeri belirtebilir ve o anahtar için anında öğe değerini döndürebilirsiniz.
Sözlük dizininin 0'dan başladığını unutmayın, bu nedenle For… Next döngüsünde kullanılan sözlük sayısından 1 çıkarmanız gerekir.
Sözlükteki değerleri okumak için For… Her bir döngüyü de kullanabilirsiniz:
1234567891011 | Sub PopulateReadDictionary()Dim MyDictionary As New Scripting.Dictionary, I As VariantMyDictionary."MyItem1" ekleyin, 10MyDictionary."MyItem2" ekleyin, 20MyDictionary."MyItem3" ekleyin, 30MyDictionary.Keys'deki Her Ben İçinMsgBox I & " " & MyDictionary(I)sonraki benAlt Bitiş |
Bu kod, her bir öğeyi yineler ve öğe anahtarını ve öğe değerini görüntüler.
Öğe Dizin Numarasını Kullanma
Değeri okumak için bir anahtarın veya öğenin dizin numarasını kullanabilirsiniz.
123456789101112 | Alt IndexNumbers()Dim MyDictionary As New Scripting.DictionaryMyDictionary.CompareMode = MetinCompareSözlüğüm."Öğe1" ekle, 10Sözlüğüm."Öğe2" ekle, 20Sözlüğüm."Öğe3" ekle, 30MsgBox MyDictionary.Keys(2)MsgBox MyDictionary.Items(1)Alt Bitiş |
Bu kod, dizin 0'dan başladığında 'item3' anahtarını ve öğe değeri 20'yi döndürür.
Dizin numaralarını kullanarak Anahtarlar veya Öğeler koleksiyonlarındaki tek tek anahtar veya öğe değerlerine başvurabilirsiniz.
Sözlüğü Filtreleme
Bunu yapmak için doğrudan bir yöntem yoktur, ancak bunu yapmak için kod yazmak oldukça basittir:
1234567891011 | Alt FiltreDictionary()Dim MyDictionary As New Scripting.DictionarySözlüğüm. "AAItem1" ekle, 10MyDictionary."BBItem2" ekleyin, 20MyDictionary."BBItem3" ekleyin, 30Filtredeki Her I İçin(MyDictionary.Keys, "BB")MsgBox MyDictionary.Item(I)sonraki benAlt Bitiş |
Filtre değeri, yalnızca anahtar değerin başlangıcından itibaren çalışır. Filtrede joker karakterler kullanamazsınız. Bu kod, 'BB' ile başlayan anahtar adlarına sahip iki öğe değerini döndürür.
Bu size, daha sonra başka bir sözlüğe veya çalışma sayfasına aktarabileceğiniz filtre değerinize bağlı olarak sözlüğün bir alt kümesini verecektir. Anahtar adları dikkatli bir şekilde planlayarak, her birine anlamlı bir ön ek olduğundan emin olarak, sözlüğü kolayca çeşitli bileşen parçalarına bölebilirsiniz.
Bir Anahtarın Öğe Değerini Değiştirme
Sözlük nesnesi, öğe değerinin değiştirilebilmesi açısından bir koleksiyona göre büyük bir avantaja sahiptir;
1 | MyDictionary("MyItem4") = "40" |
Koleksiyonda, bu girişi silmeniz ve ardından yeniden oluşturmanız gerekir.
İşte bir kod örneği:
12345678910111213 | Sub PopulateReadDictionary()Dim MyDictionary As New Scripting.DictionaryMyDictionary."MyItem1" ekleyin, 10MyDictionary."MyItem2" ekleyin, 20MyDictionary."MyItem3" ekleyin, 30MyDictionary("MyItem2") = "25"MyDictionary("MyItem4") = "40"n = 0 için MyDictionary.Count'a - 1MsgBox MyDictionary.Keys(n) & " " & MyDictionary.Items(n)sonraki nAlt Bitiş |
Yukarıdaki kod, sözlük içinde üç öğe ayarlar ve ardından 'MyItem2' değerini 20'den 25'e değiştirir.
Ayrıca 'MyItem4' değerini 40 olarak değiştirir. Kodun add ifadelerinde 'MyItem4' eklenmediğini unutmayın. Var olmayan bir anahtarın değerini değiştirdiğinizde, otomatik olarak oluşturulur. Bu, hiçbir hata tetiklenmediği için son derece kullanışlıdır, ancak bu, anahtar adlarınıza dikkat etmeniz gerektiği anlamına gelir. Anahtar adında yanlışlıkla yapılan bir yazım hatası, yeni bir anahtarın oluşturulduğu ve orijinal anahtar adının hala eski değere sahip olacağı anlamına gelir.
Bu, sözlük nesnesinde kolaylıkla bütünlük sorunlarına yol açabilir.
Anahtarın Var Olup Olmadığını Test Edin
Sözlükte bir anahtar değer olup olmadığını kontrol edebilirsiniz.
123456789 | Alt CheckExistsDictionary()Dim MyDictionary As New Scripting.DictionaryMyDictionary.Add "MyItem1", 10MyDictionary."MyItem2" ekleyin, 20MyDictionary."MyItem3" ekleyin, 30MsgBox MyDictionary.Exists("MyItem8")Alt Bitiş |
Kod, yeni bir sözlük nesnesine üç öğe ekler ve ardından sözlükte olmayan bir anahtarı ('MyItem8') test eder. Bu False değerini döndürür, ancak mevcut anahtarlardan biri kullanılmış olsaydı True döndürürdü.
Joker karakterler kabul edilmez. Arama metni de varsayılan olarak büyük/küçük harf duyarlıdır, ancak bu değiştirilebilir (makalenin ilerleyen kısımlarına bakın)
Bir Sözlükte Birden Çok Değer Kullanmak
Bir diziden farklı olarak, sözlük nesnesi yalnızca tek boyutludur. Bir anahtara karşı koymak istediğiniz birkaç değeriniz varsa, bu sorunlara yol açabilir.
Bunu aşmanın bir yolu, her bir değer arasında bir sınırlayıcı karakter kullanarak her bir öğe değerini birleştirmek, örn. '|'
12345678910111213141516171819202122232425262728293031323334 | Alt Çoklu Değerler()'Sözlük nesnesi ve değişkenleri oluşturDim MyDictionary As New Scripting.Dictionary, V1 As Integer, V2 As StringDim V3 As Date, Temp As String, N As Integer'Birden çok değeri göstermek için 3 değişkeni doldurunV1 = 5V2 = "Birden çok değer örneği"V3 = "22-Tem-2020"'Birleştirilmiş değeri "|" kullanarak sözlüğe ekleyin sınırlayıcıMyDictionary.Add "MyMultipleItem", V1 & "|" & V2 & "|" & V3 & "|"'Birleştirilmiş sözlük değerini sözlükten bir değişkene yakalaTemp = MyDictionary("MyMultipleItem")Bireysel değerleri ayırmak için birleştirilmiş dizeyi yineleyinYapmak'Bir sınırlayıcının konumunu bulunN = InStr(Sıcaklık, "|")'Daha fazla sınırlayıcı yoksa çıkış Do döngüsüN = 0 ise Çıkış Yap'Sınırlayıcının konumuna göre metni görüntüleMsgBox Sol(Sıcaklık, N - 1)'Sınırlayıcı bulunduktan sonra birleştirilmiş dizeyi bir sonraki karaktere kesSıcaklık = Orta(Sıcaklık, N + 1)DöngüAlt Bitiş |
Bu sorunu aşmanın bir başka yolu, anahtar adları için kendi alt komut dosyası sisteminizi tasarlamaktır. Anahtar adlarında parantez ve sayı kullanmamanız için hiçbir neden yoktur.
1234567891011 | Alt Çoklu Değerler()Dim MyDictionary As New Scripting.DictionaryMyDictionary.Add "Multiple(1)", 5MyDictionary.Add "Multiple(2)", "Birden çok değer örneği"MyDictionary.Add"Multiple(3)", "22-Jul-2020"N = 1 ila 3 içinMsgBox MyDictionary("Multiple(" & N & ")")Sonraki NAlt Bitiş |
Bu kod sözlüğe üç anahtar ekler, ancak her anahtar adı parantez içinde bir alt kod numarası içerir. Daha sonra anahtar adına başvurabilirsiniz, ancak birleştirilmiş alt kod numarasını kullanarak. Bu, bir dizi nesnesi kullanmaya çok benzer.
Öğeleri Silme
Anahtar değerine başvurarak öğeleri tek tek kaldırabilirsiniz.
1 | MyDictionary.Remove (“MyItem2”) |
Anahtar adları benzersiz olduğundan, bunun yalnızca belirli bir anahtarı ve öğe değerini kaldırdığını unutmayın.
Ayrıca sözlüğü tamamen temizleyebilirsiniz.
1 | MyDictionary.RemoveAll |
VBA'da 'Kaldır' kullanımına bir örnek:
12345678910111213141516 | Alt RemoveValues()Dim MyDictionary As New Scripting.DictionarySözlüğüm."Öğe1" ekle, 10Sözlüğüm."Öğe2" ekle, 20Sözlüğüm. "Öğe3" ekle, 30MyDictionary.Remove ("Öğe2")N = 0 için MyDictionary.Count için - 1MsgBox MyDictionary.Keys(N) & " " & MyDictionary.Items(N)Sonraki NMyDictionary.RemoveAllMsgBox MyDictionary.CountAlt Bitiş |
Kod, sözlüğe üç öğe ekler ve ardından 'Öğe2'yi kaldırır. Daha sonra, 'Item2'nin artık var olmadığını kanıtlamak için sözlükte yinelenir.
Son olarak, kod sözlükteki tüm öğeleri kaldırır ve şimdi sıfır olan sözlük sayısını görüntüler.
Aramalar için Büyük/Küçük Harfe Duyarlılığını Değiştirme
Bir anahtar için arama yaparsanız, varsayılan olarak büyük/küçük harf duyarlıdır. Ancak bunu değiştirmek için 'CompareMode' özelliğini kullanabilirsiniz.
Bunun, sözlük nesnesini oluşturduktan hemen sonra, ancak sözlüğe herhangi bir veri eklemeden önce kodda yapılması gerektiğini unutmayın. Karşılaştırma modu bir kez ayarlandıktan sonra o sözlük içinde değiştirilemez.
12345678910 | Alt ChangeCaseSensitivity()Dim MyDictionary As New Scripting.DictionaryMyDictionary.CompareMode = MetinCompareSözlüğüm."Öğe1" ekle, 10Sözlüğüm."Öğe2" ekle, 20Sözlüğüm."Öğe3" ekle, 30MsgBox MyDictionary.Exists("item2")Alt Bitiş |
Bu örnekte, karşılaştırma modu 'TextCompare' olarak ayarlanmıştır, bu da büyük/küçük harfe duyarlı olmadığı anlamına gelir. Örneğin sonundaki 'Var' ifadesi, arama metninin tamamı küçük harfli olmasına rağmen True değerini döndürecektir.
Excel'de karşılaştırma modu için kullanılabilecek yalnızca iki değer vardır. İkili Karşılaştırma büyük/küçük harf duyarlıdır ve Metin Karşılaştırma büyük/küçük harf duyarlı değildir
Karşılaştırma modunu İkili Karşılaştırma olarak ayarladıysanız, anahtarlarınızı adlandırırken dikkatli olmanız gerekir. Bir adı ilk karakter olarak büyük harf olacak şekilde ayarladıysanız, değeri değiştirirken ilk karakteri yine büyük harf yaptığınızdan emin olmalısınız. Küçük harfle başlarsanız, bu yeni bir anahtar olarak yorumlanır ve sözlüğünüzde kolayca kafa karışıklığına ve hatalara yol açabilir.
Bir anahtarın değerini değiştirirseniz ve kullanılan İkili Karşılaştırma nedeniyle anahtar adı mevcut değilse, sözlüğe yeni bir anahtar ve değer ekleneceğini unutmayın.
Bunun yerine Metin Karşılaştırma'yı kullanırsanız, büyük/küçük harf fark etmeksizin tüm değer değişiklikleri anahtara gider. Aynı öğeyi eklemeye çalışırsanız ancak farklı bir harf karakteriyle yazılırsa, zaten var olduğundan bir hata alırsınız.
Sözlüğü Sıralama
Koleksiyon nesnesinde olduğu gibi, anahtarları veya öğe değerlerini kullanarak sözlüğü sıralayabilmek için sağlanan hiçbir yöntem yoktur.
Ancak, VBA kodu bir Excel çalışma kitabında bulunduğundan, sözlük verileri tablo biçiminde Excel'e aktarılabilir ve ardından Excel sıralama özelliği buna uygulanabilir. Sözlük daha sonra 'RemoveAll' ve çalışma sayfasından eklenen sıralanmış değerler kullanılarak temizlenebilir.
Bu kod hem anahtarları hem de öğe değerlerini sıralayacaktır.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 | Alt SorMyDictionary()Dim MyDictionary As New DictionaryDim Sayacı Kadar Uzun'Rastgele sipariş öğeleriyle sözlük oluşturunSözlüğüm."Öğe5" ekle, 5Sözlüğüm."Öğe2" ekle, 15Sözlüğüm."Öğe4" ekle, 11Benim Sözlüğüm. "Öğe1" ekle, 2Sözlüğüm."Öğe3" ekle, 19'Gelecekte kullanmak için sözlükteki öğelerin sayısını yakalaSayaç = MyDictionary.Count'Sözlük aracılığıyla her bir anahtarı ve öğeyi 'Sayfa1'de (sütun A) ardışık bir hücreye kopyalayarak yineleyinN = 0 için MyDictionary.Count için - 1Sayfalar("Sayfa1").Cells(N + 1, 1) = MyDictionary.Keys(N)Sheets("Sayfa1").Cells(N + 1, 2) = MyDictionary.Items(N)Sonraki N'Sayfa1'i etkinleştirin ve verileri artan düzende sıralamak için Excel sıralama yordamını kullanınSayfalar("Sayfa1").EtkinleştirRange("A1:B" & MyDictionary.Count).SeçActiveWorkbook.Worksheets("Sayfa1").Sort.SortFields.ClearActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range( _"A1:A5"), SortOn:=xlSortOnValues, Order:=xlArtan, DataOption:= _xlSıralamaNormalActiveWorkbook.Worksheets("Sayfa1") ile.Sırala.SetRange Aralığı("A1:A5").Başlık = xlGuess.MatchCase = Yanlış.Oryantasyon = xlTopToBottom.SortMethod = xlPinYin.Uygulamakİle bitmek'Sözlükteki tüm öğeleri temizleMyDictionary.RemoveAll'Döngü için depolanan değeri (Sayaç) kullanarak hücre değerlerini boş sözlük nesnesine geri kopyalayın.N = 1 Sayaç içinMyDictionary.Add Sheets("Sayfa1").Hücreler(N, 1).Value, Sheets("Sayfa1").Hücreler(N, 2).DeğerSonraki N'Öğelerin şu anda içinde bulundukları sırayı kanıtlamak için sözlüğü yineleyin.N = 0 için MyDictionary.Count - 1MsgBox MyDictionary.Keys(N) & " " & MyDictionary.Items(N)Sonraki N'Çalışma sayfasını temizle (Sayfa1) - gerekirse onu da silinSayfalar("Sayfa1").Aralık(Hücreler(1, 1), Hücreler(Sayaç, 2)).TemizleAlt Bitiş |
Bu kod, eklenen beş rastgele sıra değeriyle bir sözlük oluşturur. Bir değişkendeki öğelerin sayısını yakalar ve ardından sözlük boyunca yinelenir, anahtar ve öğe değerlerini bir çalışma sayfasındaki ayrı sütunlara aktarır.
Ardından, A sütununu sıralama alanı olarak kullanarak indirilen aralığı sıralar. Sözlük, 'RemoveAll' yöntemi kullanılarak tamamen temizlenir ve ardından kod, çalışma sayfasındaki hücre değerleri boyunca yinelenir ve bunları tekrar sözlüğe ekler.
Son olarak, kod sözlük boyunca yinelenir ve sıralamanın işe yaradığını kanıtlamak için birleştirilmiş anahtar ve öğe değerlerini görüntüler.
Sıralama kodundaki parametreleri değiştirerek, veriler öğe değerlerine göre sıralanabilir.
Anahtar Listesini Çalışma Sayfasına Kopyalama
Aşağıdaki kodu kullanarak tüm anahtar değerlerin bir listesini bir çalışma sayfasına kopyalayabilirsiniz:
12345678910 | Alt CopyKeyList()Dim MyDictionary As New Scripting.DictionaryMyDictionary.CompareMode = MetinCompareSözlüğüm."Öğe1" ekle, 10Sözlüğüm."Öğe2" ekle, 20Sözlüğüm."Öğe3" ekle, 30Sheets("Sheet1").Range("A1").Value = Join(MyDictionary.Keys, vbLf)Alt Bitiş |
Bu, çalışma sayfanızda sonucu üretecektir:
Bu kodu kullanarak tüm sözlüğü bir çalışma sayfasına kopyalayabilirsiniz:
12345678910 | Alt CopyIntoWorksheet()Dim MyDictionary As New Scripting.DictionarySözlüğüm."Öğe1" ekle, 10Sözlüğüm."Öğe2" ekle, 20Sözlüğüm."Öğe3" ekle, 30Range("A1").Resize(MyDictionary.Count, 1) = WorksheetFunction.Transpose(MyDictionary.Keys)Range("B1").Resize(MyDictionary.Count, 1) = WorksheetFunction.Transpose(MyDictionary.Items)Alt Bitiş |
Çalışma sayfanız şöyle görünecek:
Bir Sözlüğü Koleksiyonla Karşılaştırma
Sözlük bir koleksiyondan daha hızlıdır.
Bir Koleksiyon zaten VBA içinde. Bir Sözlük, eklenecek Microsoft Komut Dosyası Sözlüğü'ne veya geç bağlama kullanılarak oluşturulan bir nesneye ihtiyaç duyar
Bir Koleksiyon öğesi yalnızca bir kez yazılabilir ve birçok kez okunabilir. Sözlükte, öğe değeri değiştirilebilir. Bir Koleksiyon ile, öğenin kaldırılması ve ardından değiştirilen öğenin geri eklenmesi gerekir.
Koleksiyon, hangi dizin değerinin nereye ait olduğunu bulmak zor olabilen dizin değerleri üzerinde çalışır. Sözlük, bir öğeyi bulmak için kullanılan benzersiz anahtar değerler üzerinde çalışır.
Büyük bir Koleksiyonda tek bir öğeyi almak, Sözlükte olduğundan daha yavaştır
Bir Koleksiyonda, anahtarlar yalnızca veri aramak için kullanılır ve geri alınamaz. Bir sözlükte, anahtarların varlığı test edilebilir ve belirli bir öğeyi bulmak için kullanılabilir.
Koleksiyonlar büyük/küçük harf duyarlıdır ve bu değiştirilemez. Bir Sözlükte, karşılaştırma modu büyük/küçük harf duyarlılığı veya büyük/küçük harf duyarlılığı olmayan şekilde ayarlanabilir
Bir Koleksiyonda, anahtar değerler dize olmalıdır. Bir Sözlükte herhangi bir veri türü olabilirler; sayısal, tarih vb.
Bir Koleksiyondaki tüm öğelerin kaldırılması, Koleksiyon nesnesinin yeniden tanımlanmasını içerir. Sözlük bunun için 'RemoveAll' yöntemine sahiptir.