Naudojant VBA žodyną
VBA žodynas veikia panašiai kaip rinkimo objektas, tačiau jis turi daugiau savybių ir metodų bei suteikia daugiau lankstumo
Žodynas saugo duomenis atmintyje ir gali būti lengvai valdomas. Nereikia automatinio skaičiavimo, atsarginės kopijos fone ir ekrano atnaujinimo, todėl jūsų kodas bus paleistas žymiai greičiau.
Žodyno objektas veikia panašiai kaip įprastas žodynas, kurį naudosite, jei norite sužinoti žodžio reikšmę. Kiekvienas žodyno objekto įrašas turi „rakto“ reikšmę ir „elemento“ reikšmę. Jūs naudojate raktą „raktas“, kad ieškotumėte elemento vertės žodyno objekte, panašiai kaip ir įprastą žodyną.
Dėl to, kaip veikia žodyno objektas, visos pagrindinės vertės turi būti unikalios, kaip ir įprastame žodyne. Įsivaizduokite, jei atidarę įprastą žodyną ieškotumėte žodžio reikšmės ir rastumėte žodį, išvardytą daugiau nei vieną kartą su dviem visiškai skirtingais apibrėžimais. Jūs būtumėte labai supainioti!
Pagrindinės vertės paprastai yra tekstas arba skaičiai arba abu. Vartotojams dažnai lengviau įsiminti klavišų pavadinimus kaip tekstą, o ne tik skaičius.
Palyginus su kolekcijos objektu, kolekcijos objektas yra tik skaitomas. Jis turi tik du metodus (pridėti ir pašalinti) ir dvi ypatybes (skaičius ir elementas). Pridėjus elementą prie kolekcijos objekto, jį galima pašalinti, bet neredaguoti, o tai yra sudėtinga procedūra, jei reikia pakeisti elemento vertę.
Žodyno objekto dydis automatiškai pasikeis, kad atitiktų jame esančių elementų skaičių. Jo nereikia apibrėžti pagal dydį, kaip ir įprastas masyvas
Žodyno objektas yra vienmatis, o duomenų tipas-„Variantas“, todėl į jį galima įvesti bet kokį duomenų tipą, pvz. skaičius, tekstas, data
VBA žodynas nėra gimtoji „Excel“ ir jį reikia pasiekti naudojant ankstyvą arba vėlyvą įrišimą, kai apibrėžiamas žodyno objektas
123 | Sub EarlyBindingExample ()„Dim MyDictionary As New Scripting.Dictionary“Pabaiga Sub |
1234 | Sub LateBindingExample ()„Dim MyDictionary“ kaip objektasNustatyti MyDictionary = CreateObject ("Scripting.Dictionary")Pabaiga Sub |
Jei naudojate ankstyvą įrišimą, turite pridėti nuorodą į „Microsoft Scripting Runtime“ biblioteką
Tai galite padaryti pasirinkę „Įrankiai | Nuorodos “„ Visual Basic Editor “(VBE) lango meniu juostoje ir iššokantis langas su galimų bibliotekų sąrašu.
Slinkite žemyn iki „Microsoft Scripting Runtime“ ir pažymėkite šalia jo esantį langelį. Spustelėkite Gerai, o ši biblioteka dabar yra jūsų VBA projekto dalis ir gali būti pateikta nuoroda naudojant ankstyvą įrišimą. Visuose kodo pavyzdžiuose šiame straipsnyje bus naudojamas ankstyvas įrišimas.
Jūsų kodas bus paleistas žymiai greičiau su ankstyvu susiejimu, nes jis yra sudarytas iš anksto. Vėlai susiejant, objektas turi būti sukompiliuotas vykdant kodą
„Scripting Runtime“ bibliotekoje yra „Intellisense“. Rašydami kodą pamatysite galimų metodų ir ypatybių sąrašus, kurie padės išvengti rašybos klaidų, dėl kurių jūsų programoje atsiras klaidų
Be to, jei paspausite F2 VBE ir pasirinksite „Scripting“ biblioteką, pamatysite visus galimus metodus ir ypatybes bei kiekvienam reikiamus parametrus
„Excel“ programos, kurioje yra žodynas, platinimas
Kaip jau minėta, „Scripting Runtime“ biblioteka nėra „Excel VBA“ dalis, taigi, jei platinate savo programą kitiems vartotojams, jie turi turėti prieigą prie „Scripting Runtime“ bibliotekos savo kompiuteryje. Jei jų nėra, įvyks klaida.
Patartina įtraukti tam tikrą VBA kodą, kad patikrintumėte, ar ši biblioteka yra įkeliant „Excel“ programą. Norėdami tai padaryti įvykyje „Darbaknygės atidarymas“, galite naudoti komandą „Dir“
Failo vieta yra C: \ Windows \ SysWOW64 \ scrrun.dll
Žodyno objekto apimtis
Žodyno objektas pasiekiamas tik atidarius „Excel“ darbaknygę. Išsaugojus darbo knygą jis neišsaugomas.
Jei jūsų žodynas bus prieinamas visoms jūsų modulio procedūroms, turite jį deklaruoti (Dim) pačiame modulio viršuje esančioje skiltyje Deklaruoti
Jūs apibrėžiate jį kaip visuotinį objektą, jei norite, kad jūsų žodynas būtų naudojamas visame kode.
1 | Pasaulinis mano žodynas kaip naujas žodynas |
Gyvenimas ir skaitymas iš jūsų žodyno
Norėdami pradėti, turite sukurti žodyną, užpildyti jį kai kuriais duomenimis ir pakartoti jį, kad įrodytumėte, jog duomenys egzistuoja
1234567891011 | Sub PopulateReadDictionary ()„Dim MyDictionary As New Scripting.Dictionary“„MyDictionary“. Pridėkite „MyItem1“, 10MyDictionary. Pridėti „MyItem2“, 20„MyDictionary“. Pridėkite „MyItem3“, 30Jei n = 0 į „MyDictionary“. Skaičius - 1MsgBox MyDictionary.Keys (n) & "" & MyDictionary.It elementai (n)Kitas nPabaiga Sub |
Šis kodas sukuria naują žodyno objektą, pavadintą „MyDictionary“, ir užpildo jį trimis elementais. Pridėjimo metodas turi du parametrus - raktą ir elementą, ir jie abu yra būtini
Rakto ir elemento duomenų tipai yra skirtingi, todėl jie priims bet kokio tipo duomenis - skaitinius, tekstinius, datos ir kt
Pirmąjį žodyno elementą galima pridėti taip:
1 | MyDictionary.Add 10, "MyItem1" |
Reikšmės buvo pakeistos tarp rakto ir elemento, tačiau tai vis tiek veiks, nors paieškos klavišas dabar taps 10.
Tačiau svarbu suprasti, kad pagrindinė reikšmė yra paieškos vertė žodyne. Jis veikia labai panašiai kaip „Excel“ funkcija VLOOKUP. Kadangi visi raktai turi turėti unikalias reikšmes, galite nurodyti rakto vertę ir iškart grąžinti to rakto elemento vertę.
Atminkite, kad žodyno rodyklė prasideda nuo 0, todėl turite atimti 1 iš žodžių skaičiaus, naudojamo cikle „For… Next“
Taip pat galite naudoti už … Kiekvieną kilpą, kad perskaitytumėte žodyno reikšmes:
1234567891011 | Sub PopulateReadDictionary ()Dim MyDictionary As New Scripting. Žodynas, aš kaip variantas„MyDictionary“. Pridėkite „MyItem1“, 10MyDictionary. Pridėti „MyItem2“, 20„MyDictionary“. Pridėkite „MyItem3“, 30Kiekvienam aš savo žodyne. Raktai„MsgBox I“ ir „“ ir „MyDictionary“ (I)Toliau ašPabaiga Sub |
Šis kodas kartos kiekvieną elementą ir parodys elemento raktą bei elemento vertę
Naudojant prekės indekso numerį
Norėdami sužinoti reikšmę, galite naudoti rakto ar elemento indekso numerį
123456789101112 | Antrinis indeksasNumeriai ()„Dim MyDictionary As New Scripting.Dictionary“MyDictionary.CompareMode = Teksto palyginimas„MyDictionary“. Pridėkite „1 elementas“, 10MyDictionary.Pridėti "Item2", 20„Mano žodynas“. Pridėkite „3 elementas“, 30„MsgBox MyDictionary“. Raktai (2)„MsgBox MyDictionary“. Elementai (1)Pabaiga Sub |
Šis kodas grąžins raktą „item3“, kai indeksas prasideda nuo 0, o elemento vertė yra 20
Naudodami indekso numerius, galite kreiptis į atskiras raktų ar elementų reikšmes kolekcijose „Keys“ arba „Items“.
Žodyno filtravimas
Nėra tiesioginio metodo, kaip tai padaryti, tačiau parašyti kodą yra gana paprasta:
1234567891011 | Subfiltras Žodynas ()„Dim MyDictionary As New Scripting.Dictionary“„MyDictionary“. Pridėkite „AAItem1“, 10MyDictionary. Pridėti „BBItem2“, 20„MyDictionary“. Pridėkite „BBItem3“, 30Kiekvienam filtrui („MyDictionary.Keys“, „BB“)„MsgBox“ mano žodynas. Elementas (I)Toliau ašPabaiga Sub |
Filtro vertė veikia tik nuo rakto vertės pradžios. Filtre negalima naudoti pakaitos simbolių. Šis kodas grąžins dviejų elementų reikšmes su raktų pavadinimais, prasidedančiais „BB“
Tai suteiks jums žodyno pogrupį pagal jūsų filtro vertę, kurį galėsite perkelti į kitą žodyną ar darbalapį. Kruopščiai planuodami raktų pavadinimus ir įsitikindami, kad prie kiekvieno iš jų yra prasmingas priešdėlis, žodyną lengvai galėsite padalyti į įvairias sudedamąsias dalis.
Rakto elemento vertės keitimas
Žodyno objektas turi didelį pranašumą prieš kolekciją tuo, kad elemento vertę galima keisti pvz.
1 | MyDictionary ("MyItem4") = "40" |
Kolekcijoje turėsite ištrinti tą įrašą ir tada jį sukurti iš naujo.
Štai kodo pavyzdys:
12345678910111213 | Sub PopulateReadDictionary ()„Dim MyDictionary As New Scripting.Dictionary“„MyDictionary“. Pridėkite „MyItem1“, 10MyDictionary. Pridėti „MyItem2“, 20„MyDictionary“. Pridėkite „MyItem3“, 30MyDictionary ("MyItem2") = "25"MyDictionary ("MyItem4") = "40"Jei n = 0 į „MyDictionary“. Skaičius - 1MsgBox MyDictionary.Keys (n) & "" & MyDictionary.It elementai (n)Kitas nPabaiga Sub |
Aukščiau pateiktas kodas žodyne nustato tris elementus ir pakeičia „MyItem2“ reikšmę nuo 20 iki 25.
Taip pat pakeičiama „MyItem4“ reikšmė į 40. Atminkite, kad kodo pridėjimo teiginiuose „MyItem4“ nebuvo pridėta. Pakeitus neegzistuojančio rakto vertę, jis automatiškai sukuriamas. Tai labai patogu, nes nesuveikia jokia klaida, tačiau tai reiškia, kad turite būti atsargūs su savo raktų pavadinimais. Atsitiktinė rašybos klaida rakto pavadinime reikštų, kad sukuriamas naujas raktas, o pradinio rakto pavadinimas vis tiek turės seną reikšmę.
Tai gali lengvai sukelti žodyno objekto vientisumo problemų.
Išbandykite, ar raktas egzistuoja
Galite patikrinti, ar žodyne yra pagrindinė vertė
123456789 | Sub CheckExistsDictionary ()„Dim MyDictionary As New Scripting.Dictionary“„MyDictionary“. Pridėkite „MyItem1“, 10MyDictionary. Pridėti „MyItem2“, 20„MyDictionary“. Pridėkite „MyItem3“, 30„MsgBox MyDictionary.Exists“ („MyItem8“)Pabaiga Sub |
Kodas prideda tris elementus prie naujo žodyno objekto ir tada patikrina raktą („MyItem8“), kurio nėra žodyne. Tai grąžina klaidingą, bet jei būtų panaudotas vienas iš esamų raktų, būtų grąžinta tiesa
Pakaitos simboliai nepriimami. Pagal numatytuosius nustatymus paieškos tekste taip pat skiriamos didžiosios ir mažosios raidės, tačiau tai galima pakeisti (žr. Vėliau straipsnyje)
Kelių verčių naudojimas žodyne
Skirtingai nuo masyvo, žodyno objektas yra tik vieno matmens. Tai gali sukelti problemų, jei turite keletą vertybių, kurias norite sugriauti.
Vienas iš būdų yra sujungti kiekvieną elemento vertę, naudojant tarpų ženklą tarp kiekvienos vertės, pvz. „|“
12345678910111213141516171819202122232425262728293031323334 | Sub MultipleValues ()„Sukurkite žodyno objektą ir kintamuosius„Dim MyDictionary“ kaip naujas scenarijus. Žodynas, V1 kaip sveikasis skaičius, V2 kaip eilutėDim V3 kaip data, temp kaip eilutė, N kaip sveikasis skaičius„Įveskite 3 kintamuosius, kad parodytumėte kelias reikšmesV1 = 5V2 = "Kelių verčių pavyzdys"V3 = "2020 m. Liepos 22 d."„Pridėkite susietą reikšmę prie žodyno naudodami„ | “ ribotuvasMyDictionary.Pridėti "MyMultipleItem", V1 & "|" & V2 & "|" & V3 & "|"„Užfiksuokite susietą žodyno reikšmę iš žodyno į kintamąjįTemp = MyDictionary ("MyMultipleItem")„Pakartokite sujungtą eilutę, kad atskirtumėte atskiras vertesDaryk„Raskite ribotuvo padėtįN = „InStr“ („Temp“, „|")„Jei nebėra ribų, išeikite iš Do kilposJei N = 0, išeikite iš „Do“„Rodyti tekstą, palyginti su rasto skyriklio padėtimi„MsgBox“ kairėn (temp, N - 1)„Sutrumpintą eilutę sutrumpinkite iki kito simbolio po rasto skirtukoTemp = vidutinė (temp, N + 1)KilpaPabaiga Sub |
Kitas būdas išspręsti šią problemą yra suprojektuoti savo antrinių scenarijų sistemą raktų pavadinimams. Nėra jokios priežasties, kodėl neturėtumėte naudoti skliaustų ir skaičių raktų pavadinimuose
1234567891011 | Sub MultipleValues ()„Dim MyDictionary As New Scripting.Dictionary“„MyDictionary“. Pridėti „Keli (1)“, 5MyDictionary.Add "Keli (2)", "Kelių verčių pavyzdys"MyDictionary.Pridėti „Keli (3)“, „2020 m. Liepos 22 d.“Jei N = 1–3„MsgBox MyDictionary“ („Keli („ & N & “)“)Kitas N.Pabaiga Sub |
Šis kodas į žodyną prideda tris raktus, tačiau kiekvieno rakto pavadinimo skliausteliuose yra antrojo scenarijaus numeris. Tada galite kreiptis į rakto pavadinimą, bet naudodami antrinio scenarijaus numerį. Tai labai panašu į masyvo objekto naudojimą
Elementų trynimas
Galite pašalinti atskirus elementus pagal pagrindinę vertę
1 | MyDictionary.Remove („MyItem2“) |
Atminkite, kad raktų pavadinimai yra unikalūs, todėl pašalinama tik ta konkreti rakto ir elemento vertė
Taip pat galite visiškai išvalyti žodyną
1 | MyDictionary.RemoveAll |
Štai pavyzdys, kaip naudoti „Pašalinti“ VBA:
12345678910111213141516 | Sub RemoveValues ()„Dim MyDictionary As New Scripting.Dictionary“„MyDictionary“. Pridėkite „1 elementas“, 10MyDictionary.Pridėti "Item2", 20„Mano žodynas“. Pridėkite „3 elementas“, 30MyDictionary.Remove ("2 elementas")Jei N = 0 į „MyDictionary“. Skaičius - 1MsgBox MyDictionary.Keys (N) & "" & MyDictionary.It elementai (N)Kitas N.MyDictionary.RemoveAll„MsgBox MyDictionary.Count“Pabaiga Sub |
Kodas į žodyną prideda tris elementus, o tada pašalina elementą „2“. Tada jis kartojasi per žodyną, kad įrodytų, kad „2 elementas“ nebeegzistuoja
Galiausiai kodas pašalina visus žodyno elementus ir parodo žodynų skaičių, kuris dabar yra lygus nuliui.
Keičiant paieškų didžiųjų ir mažųjų raidžių jautrumą
Jei ieškote rakto, jis pagal numatytuosius nustatymus skiria didžiąsias ir mažąsias raides. Tačiau, norėdami tai pakeisti, galite naudoti nuosavybę „CompareMode“.
Atminkite, kad tai turi būti padaryta iš karto, kai sukuriate žodyno objektą, bet prieš įtraukdami bet kokius duomenis į žodyną. Nustačius palyginimo režimą, jo negalima pakeisti tame žodyne.
12345678910 | Sub ChangeCaseSensitivity ()„Dim MyDictionary As New Scripting.Dictionary“MyDictionary.CompareMode = Teksto palyginimas„MyDictionary“. Pridėkite „1 elementas“, 10MyDictionary.Pridėti "Item2", 20„Mano žodynas“. Pridėkite „3 elementas“, 30„MsgBox MyDictionary.Exists“ („elementas2“)Pabaiga Sub |
Šiame pavyzdyje palyginimo režimas nustatytas kaip „TextCompare“, o tai reiškia, kad jis neskiria didžiųjų ir mažųjų raidžių. Pavyzdžio pabaigoje pateiktas teiginys „Egzistuoja“ grąžins „True“, nepaisant to, kad visas paieškos tekstas rašomas mažosiomis raidėmis.
„Excel“ yra tik dvi vertės, kurias galima naudoti palyginimo režimui. Dvejetainis palyginimas skiria didžiąsias ir mažąsias raides, o tekstinis palyginimas - didžiosios ir mažosios raidės
Jei jūsų palyginimo režimas nustatytas kaip dvejetainis palyginimas, turite būti atsargūs pavadindami raktus. Jei nustatote pavadinimą, kad pirmas simbolis būtų didžiosios raidės, tada, kai keičiate vertę, turite įsitikinti, kad pirmąjį simbolį vis tiek rašote didžiosiomis raidėmis. Jei pradėsite nuo mažųjų raidžių, tai bus aiškinama kaip naujas raktas ir gali lengvai sukelti painiavą bei klaidas jūsų žodyne
Atminkite, kad jei pakeisite rakto vertę ir rakto pavadinimas neegzistuoja dėl naudojamo dvejetainio palyginimo, į žodyną bus įtrauktas naujas raktas ir vertė.
Jei vietoj to naudosite teksto palyginimą, visi reikšmių pakeitimai bus perkelti į raktą, neatsižvelgiant į didžiąsias ir mažąsias raides. Jei bandysite pridėti tą patį elementą, bet parašytą kitu simboliu, gausite klaidą, nes jis jau egzistuoja.
Žodyno rūšiavimas
Kaip ir rinkimo objekto atveju, nėra jokio būdo, kaip būtų galima rūšiuoti žodyną, naudojant raktus ar elementų reikšmes.
Tačiau, kadangi VBA kodas yra „Excel“ darbaknygėje, žodyno duomenis galima perkelti į „Excel“ lentelės pavidalu ir tada pritaikyti „Excel“ rūšiavimo funkciją. Tada žodyną galima išvalyti naudojant „RemoveAll“ ir surūšiuotas vertes pridėti iš darbalapio.
Šis kodas surūšiuos raktus ir elementų reikšmes
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 | Sub SortMyDictionary ()„Dim MyDictionary“ kaip naujas žodynasDim skaitiklis kaip ilgai„Sukurkite žodyną su atsitiktinės eilės elementaisMyDictionary.Pridėti "Item5", 5MyDictionary.Pridėti "Item2", 15MyDictionary.Pridėti "Item4", 11„MyDictionary“. Pridėkite „1 elementas“, 2MyDictionary. Pridėti „Item3“, 19„Užfiksuokite žodžių skaičių žodyne, kad galėtumėte juos naudoti ateityjeSkaitliukas = MyDictionary.Count„Pakartokite žodyną, nukopijuodami kiekvieną raktą ir elementą į eilutę„ Sheet1 “(A stulpelis)Jei N = 0 į „MyDictionary“. Skaičius - 1Skaičiuoklės ("Sheet1"). Ląstelės (N + 1, 1) = MyDictionary.Keys (N)Skaičiuoklės ("Sheet1"). Ląstelės (N + 1, 2) = MyDictionary.Elements (N)Kitas N.„Suaktyvinkite„ Sheet1 “ir naudokite„ Excel “rūšiavimo tvarką, kad surūšiuotumėte duomenis didėjančia tvarkaSkaičiuoklės („Sheet1“). AktyvintiDiapazonas („A1: B“ ir „MyDictionary.Count“). PasirinkiteActiveWorkbook.Worksheets ("Sheet1"). Rūšiuoti.SortFields.ClearActiveWorkbook.Worksheets ("Sheet1"). Sort.SortFields.Add2 Key: = Diapazonas (_"A1: A5"), SortOn: = xlSortOnValues, Tvarka: = xlAugantis, duomenų pasirinkimas: = _xlSortNormalSu „ActiveWorkbook.Worksheets“ („Sheet1“). Rūšiuoti.SetRange diapazonas ("A1: A5").Header = xlGuess.MatchCase = Netiesa.Orientation = xlTopToBottom.SortMethod = xlPinYin.TaikytiPabaiga su„Išvalykite visus žodyno elementusMyDictionary.RemoveAll„Nukopijuokite langelio vertes atgal į tuščią žodyno objektą, naudodami„ ciklo “išsaugotą vertę (skaitiklis)N = 1 skaitikliuiMyDictionary.Add Sheets ("Sheet1"). Ląstelės (N, 1). Vertė, Sheets ("Sheet1"). Ląstelės (N, 2). ValueKitas N.„Pakartokite žodyną, kad įrodytumėte, kokia tvarka dabar yra daiktaiJei N = 0 į „MyDictionary“. Skaičius - 1MsgBox MyDictionary.Keys (N) & "" & MyDictionary.It elementai (N)Kitas N.„Išvalykite darbalapį (1 lapas) - jei reikia, taip pat ištrinkiteSkaičiuoklės („Sheet1“). Diapazonas (Cells (1, 1), Cells (Counter, 2)). ClearPabaiga Sub |
Šis kodas sukuria žodyną su penkiomis atsitiktinės eilės reikšmėmis. Jis fiksuoja elementų skaičių į kintamąjį ir tada kartojasi per žodyną, perkeldamas raktų ir elementų reikšmes į atskirus darbalapio stulpelius.
Tada jis rūšiuoja atsisiųstą diapazoną, naudodamas A stulpelį kaip rūšiavimo lauką. Žodynas visiškai išvalomas naudojant „RemoveAll“ metodą, o kodas kartoja darbalapio langelio vertes ir vėl jas prideda prie žodyno.
Galiausiai kodas kartojasi per žodyną, rodydamas sujungtas raktų ir elementų vertes, įrodančias, kad rūšiavimas veikė.
Pakeitus rūšiavimo kodo parametrus, duomenys galėtų būti rūšiuojami pagal elementų reikšmes.
Raktų sąrašo kopijavimas į darbalapį
Galite nukopijuoti visų pagrindinių verčių sąrašą į darbalapį naudodami šį kodą:
12345678910 | Sub CopyKeyList ()„Dim MyDictionary As New Scripting.Dictionary“MyDictionary.CompareMode = Teksto palyginimas„MyDictionary“. Pridėkite „1 elementas“, 10MyDictionary.Pridėti "Item2", 20„Mano žodynas“. Pridėkite „3 elementas“, 30Skaičiuoklės ("Sheet1"). Diapazonas ("A1"). Vertė = Prisijungti (MyDictionary.Keys, vbLf)Pabaiga Sub |
Rezultatas bus pateiktas jūsų darbalapyje:
Galite nukopijuoti visą žodyną į darbalapį naudodami šį kodą:
12345678910 | Sub CopyIntoWorksheet ()„Dim MyDictionary As New Scripting.Dictionary“„MyDictionary“. Pridėkite „1 elementas“, 10MyDictionary.Pridėti "Item2", 20„Mano žodynas“. Pridėkite „3 elementas“, 30Diapazonas ("A1"). Keisti dydį (MyDictionary.Count, 1) = WorksheetFunction.Transpose (MyDictionary.Keys)Diapazonas ("B1"). Keisti dydį (MyDictionary.Count, 1) = WorksheetFunction.Transpose (MyDictionary.Items)Pabaiga Sub |
Jūsų darbalapis atrodys taip:
Žodžio palyginimas su kolekcija
Žodynas yra greitesnis nei rinkinys.
Kolekcija jau yra VBA. Žodynui reikia nuorodos į „Microsoft“ scenarijų žodyną arba objektą, sukurtą naudojant vėlyvą įrišimą
Kolekcijos elementą galima parašyti tik vieną kartą ir perskaityti daug kartų. Žodyne elemento vertę galima pakeisti. Naudojant kolekciją, elementas turi būti pašalintas, o tada pakeistas elementas vėl pridėtas.
Kolekcija veikia pagal indekso reikšmes, todėl gali būti sunku išsiaiškinti, kuri indekso vertė kur priklauso. Žodynas naudoja unikalias pagrindines vertes, kurios naudojamos elementui surasti
Atskiro elemento gavimas didelėje kolekcijoje yra lėtesnis nei žodyno
Kolekcijoje raktai naudojami tik duomenims ieškoti ir jų negalima atkurti. Žodyne raktų buvimą galima patikrinti ir naudoti tam tikram elementui surasti.
Kolekcijose skiriamos didžiosios ir mažosios raidės ir to negalima pakeisti. Žodyne palyginimo režimą galima nustatyti taip, kad būtų skiriamos didžiosios ir mažosios raidės
Kolekcijoje pagrindinės vertės turi būti eilutės. Žodyne jie gali būti bet kokio tipo duomenys, pvz. skaičių, datą ir kt
Pašalinus visus kolekcijos elementus reikia iš naujo apibrėžti kolekcijos objektą. Žodynas tam turi „RemoveAll“ metodą.