- VBA massiivi kiirleht
- VBA massiivi kiirnäited
- Massiivi eelised? - Kiirus!
- Massiivi loomine / deklareerimine (Dim)
- Määrake massiivi väärtused
- Määrake massiivile vahemik
- 2D / mitmemõõtmelised massiivid
- Mitmemõõtmelise massiivi näited
- Massiivi pikkus / suurus
- Silmus läbi massiivi
- Muud massiiviülesanded
- Massiivide kasutamine Access VBA -s
VBA -s on a Massiiv on üks muutuja, mis võib sisaldada mitut väärtust. Mõelge massiivile nagu lahtrivahemik: iga lahter võib salvestada väärtuse. Massiivid võivad olla ühemõõtmelised (mõelge ühele veerule), kahemõõtmelised (mõelge mitmele reale ja veerule) või mitmemõõtmelised. Massiivi väärtustele pääseb juurde nende asukoha (indeksi numbri) järgi massiivis.
VBA massiivi kiirleht
Massiivid
KirjeldusVBA koodLooDim arr (1 kuni 3) Variandinaarr (1) = "üks"
arr (2) = “kaks”
arr (3) = "kolm"Loo ExcelistDim arr (1 kuni 3) Variandina
Dim dimmer As Range, i As Integer
i = LBound (arr)
Iga lahtri vahemikus ("A1: A3")
i = i + 1
arr (i) = rakk.väärtus
Järgmine lahterLugege kõiki punkteDim i kui pikk
I = LBound (arr) kuni UBound (arr)
MsgBox arr (i)
Edasi iKustutaKustuta arrMassiiv stringileDim sName nagu string
sName = Liitu (arr, “:”)Suurenda suurustReDim Preserve arr (0 kuni 100)Määra väärtusarr (1) = 22
VBA massiivi kiirnäited
Vaatame täielikku näidet, enne kui hakkame üksikasjadesse laskuma:
12345678910 | AlammassNäide ()Dim strNames (1 kuni 4) stringinastrNames (1) = "Shelly"strNames (2) = "Steve"strNames (3) = "Neema"strNames (4) = "Jose"msgbox strNames (3)End Sub |
Siin oleme loonud ühemõõtmelise stringimassiivi: strNames suurusega neli (mahutab neli väärtust) ja määranud neli väärtust. Lõpuks kuvame sõnumikastis kolmanda väärtuse.
Sellisel juhul on massiivi kasutamisest kasu vähe: nelja asemel tuleb esitada ainult üks muutujadeklaratsioon.
Kuid vaatame näidet, mis näitab massiivi tegelikku võimsust:
12345678 | AlammassNäide2 ()Dim strNames (1 kuni 60000) stringinaDim i As LongI = 1 kuni 60000strNames (i) = Lahtrid (i, 1). VäärtusEdasi iEnd Sub |
Siin oleme loonud massiivi, mis mahutab 60 000 väärtust, ja oleme massiivi kiiresti töölehe veerust A täitnud.
Massiivi eelised? - Kiirus!
Võite mõelda Exceli töölehtedega sarnastele massiividele:
- Iga lahter (või massiivi üksus) võib sisaldada oma väärtust
- Igale lahtrile (või massiivi üksusele) pääseb juurde rea ja veeru asukoha järgi.
- Tööleht Ex. lahtrid (1,4). väärtus = "1. rida, veerg 4"
- Massiiv Ex. arrVar (1,4) = "Rida 1, veerg 4"
Miks siis massiividega vaeva näha? Miks mitte lugeda ja kirjutada väärtusi otse Exceli lahtritesse? Üks sõna: Kiirus!
Exceli lahtritesse lugemine / kirjutamine on aeglane protsess. Massiividega töötamine on palju kiirem!
Massiivi loomine / deklareerimine (Dim)
Märkus. Massiividel võib olla mitu „mõõdet”. Asjade lihtsuse hoidmiseks alustame ainult ühemõõtmeliste massiividega. Hiljem õpetuses tutvustame teile mitmemõõtmelisi massiive.
Staatiline massiiv
Staatilised massiivid on massiivid, mille suurust ei saa muuta. Vastupidi, Dünaamilised massiivid saab suurust muuta. Neid deklareeritakse veidi erinevalt. Kõigepealt vaatame staatilisi massiive.
Märkus. Kui teie massiivi suurus ei muutu, kasutage staatilist massiivi.
Staatilise massiivi muutuja deklareerimine on väga sarnane tavalise muutuja deklareerimisega, välja arvatud juhul, kui peate määrama massiivi suuruse. Massiivi suuruse määramiseks on mitu erinevat võimalust.
Massiivi algus- ja lõpppositsiooni saate selgesõnaliselt deklareerida:
123456789101112 | Sub StaticArray1 ()'Loob massiivi positsioonidega 1,2,3,4Dim arrDemo1 (1 kuni 4) stringina"Loob massiivi positsioonidega 4,5,6,7Dim arrDemo2 (4 kuni 7) nii kaua'Loob massiivi positsioonidega 0,1,2,3Dim arrDemo3 (0 kuni 3) nii kauaEnd Sub |
Või võite sisestada ainult massiivi suuruse:
123456 | Sub StaticArray2 ()'Loob massiivi positsioonidega 0,1,2,3Dim arrDemo1 (3) StringinaEnd Sub |
Tähtis! Pange tähele, et vaikimisi algavad massiivid positsioonist 0. Nii Dim arrDemo1 (3) loob massiivi positsioonidega 0,1,2,3.
Saate deklareerida Valiku alus 1 oma mooduli ülaosas, nii et massiiv algab 1. positsioonist:
12345678 | Valiku alus 1Sub StaticArray3 ()'Loob massiivi positsioonidega 1,2,3Dim arrDemo1 (3) StringinaEnd Sub |
Siiski leian, et massiivide algus- ja lõpppositsioonide selgesõnaline deklareerimine on palju lihtsam (ja vähem segadusttekitav).
Kas olete väsinud VBA koodinäidete otsimisest? Proovige AutoMacrot!
Dünaamiline massiiv
Dünaamilised massiivid on massiivid, mille suurust saab muuta (või mille suurust pole vaja määratleda).
Dünaamilise massiivi deklareerimiseks on kaks võimalust.
Variatiivmassiivid
Esimene viis dünaamilise massiivi deklareerimiseks on massiivi tüübi määramine Variant.
1 | Dim arrVar () Variandina |
Koos Variant Array, massiivi suurust pole vaja määratleda. Suurus kohandub automaatselt. Pidage ainult meeles, et massiiv algab positsiooniga 0 (kui lisate mooduli ülaosale valikubaasi 1)
12345678910111213 | AlamvariantArray ()Dim arrVar () Variandina"Määrake väärtused (suurus = 0,1,2,3)arrVar = massiiv (1, 2, 3, 4)Muuda väärtusi (suurus = 0,1,2,3,4)arrVar = massiiv ("1a", "2a", "3a", "4a", "5a")'Väljundpositsioon 4 ("5a")MsgBox arrVar (4)End Sub |
Mittevariandilised dünaamilised massiivid
Mitte-variant-massiivide puhul peate enne massiivi väärtuste määramist määrama massiivi suuruse. Massiivi loomise protsess on aga pisut erinev:
1234567 | Sub DynamicArray1 ()Dim arrDemo1 () Stringina'Muudab massiivi asukohtadega 1,2,3,4ReDim arrDemo1 (1 kuni 4)End Sub |
Esiteks deklareerite massiivi sarnaselt staatilise massiiviga, välja arvatud juhul, kui jätate massiivi suuruse välja:
1 | Dim arrDemo1 () Stringina |
Kui soovite massiivi suurust määrata, kasutage ReDim käsk massiivi suuruse suurendamiseks:
12 | 'Suuruse muutmine positsioonidega 1,2,3,4ReDim arrDemo1 (1 kuni 4) |
ReDim muudab massiivi suurust. Lugege allpool ReDim ja ReDim Preserve erinevusi.
ReDim vs ReDim Preserve
Kui kasutate ReDim käsuga kustutate massiivist kõik olemasolevad väärtused. Selle asemel saate kasutada ReDim Preserve massiivi väärtuste säilitamiseks:
12 | 'Suuruse muutmine positsioonidega 1,2,3,4 (olemasolevate väärtuste säilitamine)ReDim Preserve arrDemo1 (1 kuni 4) |
Massiivide deklareerimine lihtsustatud
Pärast kõike ülaltoodud lugemist võite tunda end ülekoormatuna. Asjade lihtsuse huvides töötame artikli ülejäänud osas enamasti staatiliste massiividega.
Määrake massiivi väärtused
Massiivi väärtuste määramine on väga lihtne.
Staatilise massiivi korral peate massiivi iga positsiooni ükshaaval määratlema:
12345678 | AlammassNäide ()Dim strNames (1 kuni 4) stringinastrNames (1) = "Shelly"strNames (2) = "Steve"strNames (3) = "Neema"strNames (4) = "Jose"End Sub |
Variantide massiivi abil saate kogu massiivi määratleda ühe reaga (praktiline ainult väikeste massiivide puhul):
123456 | AlammassiivNäide_1liin ()Dim strNames () VariandinastrNames = Massiiv ("Shelly", "Steve", "Neema", "Jose")End Sub |
Kui proovite määratleda väärtust massiivi asukohale, mida pole olemas, kuvatakse tõrketeade vahemikust väljas:
1 | strNames (5) = "Shannon" |
Allpool jaotises „Määra vahemikule massiiv” näitame teile, kuidas kasutada tsüklit massiividele suure hulga väärtuste kiireks määramiseks.
Hankige massiivi väärtus
Massiivi väärtusi saate hankida samamoodi. Allolevas näites kirjutame lahtritesse massiivi väärtused:
1234 | Vahemik ("A1"). Väärtus = strNames (1)Vahemik ("A2"). Väärtus = strNames (2)Vahemik ("A3"). Väärtus = strNames (3)Vahemik ("A4"). Väärtus = strNames (4) |
VBA programmeerimine | Koodigeneraator töötab teie jaoks!
Määrake massiivile vahemik
Massiivile vahemiku määramiseks võite kasutada tsüklit:
12345678 | AlamvahemikToArray ()Dim strNames (1 kuni 60000) stringinaDim i As LongI = 1 kuni 60000strNames (i) = Lahtrid (i, 1). VäärtusEdasi iEnd Sub |
See liigub läbi lahtrite A1: A60000, määrates massiivile lahtrite väärtused.
Väljundmassiiv vahemikku
Või kasutage massiivi vahemikule määramiseks silmust:
123 | I = 1 kuni 60000Lahtrid (i, 1). Väärtus = strNames (i)Edasi i |
See teeb vastupidi: määrake massiivi väärtused lahtritele A1: A60000
2D / mitmemõõtmelised massiivid
Siiani oleme töötanud eranditult ühemõõtmeliste (1D) massiividega. Massiividel võib aga olla kuni 32 mõõdet.
Mõelge 1D -massiivile, nagu Exceli lahtrite üks rida või veerg, 2D -massiivile, nagu terve Exceli tööleht, millel on mitu rida ja veergu, ning 3D -massiiv on nagu terve töövihik, mis sisaldab mitut lehte, millest igaüks sisaldab mitut rida ja veergu ( võiks ka mõelda 3D -massiivist nagu Rubiku kuubikust).
Mitmemõõtmelise massiivi näited
Nüüd näitame näiteid erinevate mõõtmetega massiividega töötamisest.
VBA programmeerimine | Koodigeneraator töötab teie jaoks!
1D massiivi näide
See protseduur ühendab eelmised massiivi näited üheks protseduuriks, näidates, kuidas massiive praktikas kasutada.
1234567891011121314 | AlammassiivEx_1d ()Dim strNames (1 kuni 60000) stringinaDim i As Long'Määrake massiivile väärtusedI = 1 kuni 60000strNames (i) = Lahtrid (i, 1). VäärtusEdasi i'Väljundmassiivi väärtused vahemikkuI = 1 kuni 60000Arvutustabelid ("Väljund"). Lahtrid (i, 1) .Väärtus = strNames (i)Edasi iEnd Sub |
2D massiivi näide
See protseduur sisaldab 2D -massiivi näidet:
123456789101112131415161718 | AlammassiivEx_2d ()Dim strNames (1 kuni 60000, 1 kuni 10) stringinaDim i As Long, j As Long'Määrake massiivile väärtusedI = 1 kuni 60000J = 1 kuni 10strNames (i, j) = Lahtrid (i, j). VäärtusJärgmine jEdasi i'Väljundmassiivi väärtused vahemikkuI = 1 kuni 60000J = 1 kuni 10Arvutustabelid ("Väljund"). Lahtrid (i, j) .Väärtus = strNames (i, j)Järgmine jEdasi iEnd Sub |
3D -massiivi näide
See protseduur sisaldab 3D -massiivi näidet mitme lehega töötamiseks:
12345678910111213141516171819202122 | AlammassiivEx_3d ()Dim strNames (1 kuni 60000, 1 kuni 10, 1 kuni 3) stringinaDim i As Long, j Nagu Long, k As Long'Määrake massiivile väärtusedK = 1 kuni 3I = 1 kuni 60000J = 1 kuni 10strNames (i, j, k) = Sheets ("Sheet" & k). Lahtrid (i, j) .VäärtusJärgmine jEdasi iJärgmine k'Väljundmassiivi väärtused vahemikkuK = 1 kuni 3I = 1 kuni 60000J = 1 kuni 10Arvutustabelid ("Väljund" & k). Lahtrid (i, j) .Väärtus = strNames (i, j, k)Järgmine jEdasi iJärgmine kEnd Sub |
Massiivi pikkus / suurus
Siiani oleme tutvustanud teile erinevat tüüpi massiive ja õpetanud massiive deklareerima ning massiivi väärtusi hankima/seadistama. Järgnevalt keskendume teistele massiividega töötamiseks vajalikele teemadele.
VBA programmeerimine | Koodigeneraator töötab teie jaoks!
Funktsioonid UBound ja LBound
Esimene samm massiivi pikkuse / suuruse saamiseks on UBound ja LBound funktsioonide kasutamine massiivi ülemise ja alumise piiri saamiseks:
123456 | Sub UBoundLBound ()Dim strNames (1 kuni 4) stringinaMsgBox UBound (strNames)MsgBox LBound (strNames)End Sub |
Nende kahe lahutamine (ja 1 lisamine) annab teile pikkuse:
1 | GetArrLength = UBound (strNames) - LBound (strNames) + 1 |
Massiivi pikkuse funktsioon
Siin on funktsioon ühemõõtmelise massiivi pikkuse saamiseks:
1234567 | Avalik funktsioon GetArrLength (variandina) nii kauaKui on tühi (a) SiisGetArrLength = 0MuiduGetArrLength = UBound (a) - LBound (a) + 1Lõpp KuiLõppfunktsioon |
Kas peate arvutama 2D massiivi suuruse? Vaadake meie õpetust: massiivi suuruse arvutamine.
Silmus läbi massiivi
Massiivi läbimiseks on kaks võimalust. Esimesed aasad läbivad täisarvud, mis vastavad massiivi arvu positsioonidele. Kui teate massiivi suurust, saate selle otse määrata:
12345678910111213 | AlammassiivExample_Loop1 ()Dim strNames (1 kuni 4) stringinaDim i As LongstrNames (1) = "Shelly"strNames (2) = "Steve"strNames (3) = "Neema"strNames (4) = "Jose"I = 1 kuni 4MsgBox strNames (i)Edasi iEnd Sub |
Kui te aga massiivi suurust ei tea (kui massiiv on dünaamiline), võite kasutada eelmise jaotise funktsioone LBound ja UBound:
12345678910111213 | AlammassiivExample_Loop2 ()Dim strNames (1 kuni 4) stringinaDim i As LongstrNames (1) = "Shelly"strNames (2) = "Steve"strNames (3) = "Neema"strNames (4) = "Jose"I = LBound (strNames) kuni UBound (strNames)MsgBox strNames (i)Edasi iEnd Sub |
Iga massiivi silmuse jaoks
Teine meetod on iga silmuse jaoks. See liigub läbi massiivi iga üksuse:
12345678910111213 | AlammassiivExample_Loop3 ()Dim strNames (1 kuni 4) stringinaHämardatud toodestrNames (1) = "Shelly"strNames (2) = "Steve"strNames (3) = "Neema"strNames (4) = "Jose"Iga üksuse jaoks strNamesMsgBoxi üksusJärgmine kaupEnd Sub |
Iga massiivi silmus töötab lisaks ühemõõtmelistele massiividele ka mitmemõõtmeliste massiividega.
VBA programmeerimine | Koodigeneraator töötab teie jaoks!
2D massiivi läbimine
Samuti saate UBoundi ja LBoundi funktsioone kasutada mitmemõõtmelise massiivi läbimiseks. Selles näites vaatame läbi 2D massiivi. Pange tähele, et funktsioonid UBound ja LBound võimaldavad teil määrata, millisest massiivi mõõtmest leida ülemine ja alumine piir (1 esimese mõõtme jaoks, 2 teise mõõtme jaoks).
1234567891011121314151617181920 | AlammassiivExample_Loop4 ()Dim strNames (1 kuni 4, 1 kuni 2) stringinaDim i As Long, j As LongstrNames (1, 1) = "Shelly"strNames (2, 1) = "Steve"strNames (3, 1) = "Neema"strNames (4, 1) = "Jose"strNames (1, 2) = "Shelby"strNames (2, 2) = "Steven"strNames (3, 2) = "Nemo"strNames (4, 2) = "Jesse"J = LBound (strNames, 2) kuni UBound (strNames, 2)I = LBound (strNames, 1) kuni UBound (strNames, 1)MsgBox strNames (i, j)Edasi iJärgmine jEnd Sub |
Muud massiiviülesanded
Selge massiiv
Kogu massiivi kustutamiseks kasutage kustutuslauset:
1 | Kustuta strNames |
Kasutamise näide:
12345678910 | AlammassNäide ()Dim strNames (1 kuni 4) stringinastrNames (1) = "Shelly"strNames (2) = "Steve"strNames (3) = "Neema"strNames (4) = "Jose"Kustuta strNamesEnd Sub |
Teise võimalusena võite massiivi muuta, et selle suurust muuta, tühjendades massiivi osa:
1 | ReDim strNames (1 kuni 2) |
See muudab massiivi suuruseks 2, kustutades positsioonid 3 ja 4.
Krahv Array
Massiivi igas dimensioonis olevate positsioonide arvu saate lugeda UBoundi ja LBoundi funktsioonide abil (arutatud eespool).
Massiivi kaudu loopides saate ka sisestatud üksuste (või teatud kriteeriumidele vastavate üksuste) arvu lugeda.
See näide vaatab läbi objektide massiivi ja loeb massiivist leitud tühjade stringide arvu:
123456789101112131415 | AlammassiivLoopandCount ()Dim strNames (1 kuni 4) stringinaDim i As Long, n As LongstrNames (1) = "Shelly"strNames (2) = "Steve"I = LBound (strNames) kuni UBound (strNames)Kui strNames (i) "" Siisn = n + 1Lõpp KuiEdasi iMsgBox n & "leitud tühjad väärtused."End Sub |
VBA programmeerimine | Koodigeneraator töötab teie jaoks!
Eemalda duplikaadid
Mingil hetkel võite soovida massiivist duplikaadid eemaldada. Kahjuks pole VBA-l selle tegemiseks sisseehitatud funktsiooni. Siiski oleme kirjutanud funktsiooni massiivist duplikaatide eemaldamiseks (sellesse õpetusse kaasamiseks on liiga pikk aeg, kuid lisateabe saamiseks külastage linki).
Filtreeri
Funktsioon VBA võimaldab filtreerida massiivi. Seda tehakse, luues uue massiivi, millel on ainult filtreeritud väärtused. Allpool on kiire näide, kuid lugege kindlasti artiklit, et saada rohkem näiteid erinevate vajaduste jaoks.
1234567891011121314 | Alamfiltri_vaste ()'Defineeri massiivDim strNames VariantstrNames = Massiiv ("Steve Smith", "Shannon Smith", "Ryan Johnson")'Filter MassiivDim strSubNames VariantstrSubNames = Filter (strNames, "Smith")'Krahv filtreeritud massiivMsgBox "Leitud" & UBound (strSubNames) - LBound (strSubNames) + 1 & "nimed".End Sub |
Funktsioon IsArray
Funktsiooni IsArray abil saate testida, kas muutuja on massiiv:
123456789101112 | Sub IsArrayEx ()'Loob massiivi positsioonidega 1,2,3Dim arrDemo1 (3) Stringina'Loob tavalise stringimuutujaDim str nagu stringMsgBox IsArray (arrDemo1)MsgBox IsArray (str)End Sub |
Liituge Arrayga
Saate kiiresti liituda kogu massiiviga koos liitumisfunktsiooniga:
123456789101112 | Alammassiiv_liitumine ()Dim strNames (1 kuni 4) stringinaDim joinNames kui stringstrNames (1) = "Shelly"strNames (2) = "Steve"strNames (3) = "Neema"strNames (4) = "Jose"joinNames = Liitu (strNames, ",")MsgBox joinNamesEnd Sub |
VBA programmeerimine | Koodigeneraator töötab teie jaoks!
Jagage string massiiviks
Funktsioon VBA Split jagab tekstistringi massiiviks, mis sisaldab algse stringi väärtusi. Vaatame näidet:
123456789 | Alammassiiv_jaotamine ()Hämarad nimed () stringinaDim liitusNimed stringinajoinNames = "Shelly, Steve, Nema, Jose"Nimed = poolitatud (liitunudNimed, ",")MsgBoxi nimed (1)End Sub |
Siin jagame selle tekstijada “Shelly, Steve, Nema, Jose” massiiviks (suurus 4), kasutades koma eraldajat (,).
Const Array
Massiiv ei saa deklareerida VBA -s konstantseks. Siiski saate sellest lahti saada, luues massiivina kasutatava funktsiooni:
123456789 | Määrake ConstantArrayFunktsioon ConstantArray ()ConstantArray = massiiv (4, 12, 21, 100, 5)Lõppfunktsioon'Taasta ConstantArray väärtusSub RetrieveValues ()MsgBox ConstantArray (3)End Sub |
Kopeeri massiiv
Massiivi kopeerimiseks VBA abil pole sisseehitatud viisi. Selle asemel peate väärtuste määramiseks ühest massiivist teise kasutama silmust.
12345678910111213141516171819 | Sub CopyArray ()Dim Arr1 (1 kuni 100) nii kauaDim Arr2 (1 kuni 100) sama pikkDim i As Long„Loo massiiv 1I = 1 kuni 100Arr1 (i) = iEdasi i„CopyArray1 massiivi2I = 1 kuni 100Arr2 (i) = Arr1 (i)Edasi iMsgBox Arr2 (74)End Sub |
Ülevõtmine
Massiivi ülevõtmiseks pole sisseehitatud VBA-funktsiooni. Siiski oleme kirjutanud funktsiooni 2D massiivi ülevõtmiseks. Lisateabe saamiseks lugege artiklit.
VBA programmeerimine | Koodigeneraator töötab teie jaoks!
Funktsiooni tagastamismassiiv
VBA arendajatel on tavaline küsimus, kuidas luua funktsioon, mis tagastab massiivi. Ma arvan, et enamik raskusi lahendatakse variatiivmasside abil. Oleme kirjutanud artikli sellel teemal: VBA funktsiooni tagastamise massiiv.
Massiivide kasutamine Access VBA -s
Enamik ülaltoodud massiivi näiteid töötab Access VBA -s täpselt samamoodi nagu Exceli VBA -s. Üks peamine erinevus on see, et kui soovite massiivi täita Accessi andmete abil, peate loopima objekti RecordSet, mitte vahemiku objekti.
1234567891011121314151617181920212223 | AlamvahemikToArrayAccess ()Vea korral Jätka järgmistDim strNames () stringinaDim i As LongDim iCount nii kauaDim dbs andmebaasinaDim rst Esmalt salvestusenaMäära dbs = CurrentDbMäära rst = dbs.OpenRecordset ("tblClients", dbOpenDynaset)Koos esimesega.MoveLast.MoveFirstiCount = .RecordCountReDim strNames (1 iCountile)I = 1 iCountilestrNames (i) = rst.Fields ("Kliendinimi").MoveNextEdasi iLõpetaesimene. SuleMäära esimene = mitte midagiMäära dbs = mitte midagiEnd Sub |
Massiiviõpetused | |
---|---|
Massiivi mega-juhend | jah |
Hankige massiivi suurus | |
Selge massiiv | |
Filter Massiiv | |
Massiivi ülevõtmine | |
Funktsiooni tagastamismassiiv | |
Eemalda duplikaadid | |