Masyvai programoje „Visual Basic“, skirti taikymui

„Visual Basic for Application“ masyvai yra struktūros, kuriose paprastai saugomi to paties tipo susijusių kintamųjų rinkiniai. Masyvo įrašai pasiekiami pagal jų skaitinį indeksą.

Pavyzdžiui, yra 20 žmonių komanda, kurių vardus reikia išsaugoti, kad vėliau būtų galima panaudoti VBA kode. Galima tiesiog deklaruoti 20 kintamųjų, kad būtų laikomas kiekvienas vardas, pavyzdžiui:

Dim Team_Member1 kaip eilutė Dim Team_Member2 kaip eilutė ... Dim Team_Member20 kaip eilutė

Tačiau galite naudoti daug paprastesnį ir labiau organizuotą būdą – saugokite komandos narių vardų sąrašą 20 kintamųjų masyve, pvz. Styginių:

Dim Team_Members (nuo 1 iki 20) kaip eilutė

Aukščiau parodytoje eilutėje paskelbėme masyvą. Dabar kiekvienam jo elementui parašykite vertę, pavyzdžiui:

Team_Members(1) = "Jonas Smithas"

Papildomas duomenų saugojimo masyve pranašumas, lyginant su atskirų kintamųjų naudojimu, išryškėja, kai reikia atlikti tą patį veiksmą kiekvienam masyvo elementui. Jei komandos narių vardai būtų saugomi 20 atskirų kintamųjų, kiekvieną kartą reikėtų įrašyti 20 kodo eilučių, kad kiekvienam iš jų būtų atliktas tas pats veiksmas. Tačiau jei vardai saugomi masyve, su kiekvienu iš jų galite atlikti norimą veiksmą naudodami paprastą kilpą.

Kaip tai veikia, parodyta žemiau su kodo pavyzdžiu, kuris stulpelio langeliuose paeiliui spausdina kiekvieno komandos nario vardus. A aktyvus Excel darbalapis.

Jei i = 1–20 langelių (i, 1). Reikšmė = komandos_nariai (i) Kitas i

Akivaizdu, kad dirbti su masyvu, kuriame saugoma 20 pavadinimų, yra daug mažiau sudėtinga ir tiksliau, nei naudojant 20 atskirų kintamųjų. Bet ką daryti, jei šių vardų yra ne 20, o 1000? O jei dar papildomai reikalaujama pavardes ir patronimus laikyti atskirai?! Akivaizdu, kad greitai bus visiškai neįmanoma apdoroti tokio kiekio duomenų VBA kode be masyvo pagalbos.

Daugiamačiai masyvai programoje „Excel Visual Basic“.

Aukščiau aptarti Visual Basic masyvai laikomi vienmačiais. Tai reiškia, kad jie saugo paprastą vardų sąrašą. Tačiau masyvai gali turėti kelis matmenis. Pavyzdžiui, dvimatis masyvas gali būti lyginamas su reikšmių tinkleliu.

Tarkime, kad norite išsaugoti 5 skirtingų komandų sausio mėnesio dienos pardavimų duomenis. Tam reikės dvimačio masyvo, susidedančio iš 5 metrikų rinkinių 31 dienai. Deklaruojame masyvą taip:

Maži sausio_pardavimo_skaičiai (nuo 1 iki 31, 1 iki 5) kaip valiuta

Norėdami pasiekti masyvo elementus Sausio_pardavimų_skaičiai, reikia naudoti du indeksus, nurodančius mėnesio dieną ir komandos numerį. Pavyzdžiui, elemento, kuriame yra pardavimo duomenys, adresas 2-oi komandos už 15 tūkst Sausis būtų parašytas taip:

Sausio_pardavimo_skaičiai(15, 2)

Taip pat galite deklaruoti masyvą su 3 ar daugiau matmenų – tiesiog pridėkite papildomų matmenų prie masyvo deklaracijos ir naudokite papildomus indeksus, kad nurodytumėte šio masyvo elementus.

Masyvų deklaravimas programoje Excel Visual Basic

Anksčiau šiame straipsnyje jau pažvelgėme į kelis masyvų deklaravimo VBA pavyzdžius, tačiau ši tema nusipelno atidžiau. Kaip parodyta, vienmatis masyvas gali būti deklaruojamas taip:

Dim Team_Members (nuo 1 iki 20) kaip eilutė

Tokia deklaracija VBA kompiliatoriui nurodo, kad masyvas Komandos nariai susideda iš 20 kintamųjų, kuriuos galima pasiekti naudojant indeksus nuo 1 iki 20. Tačiau galime pagalvoti apie masyvo kintamuosius sunumeruoti nuo 0 iki 19, tokiu atveju masyvas turėtų būti deklaruojamas taip:

Dim Team_Members (nuo 0 iki 19) kaip eilutė

Tiesą sakant, pagal numatytuosius nustatymus masyvo elementų numeracija prasideda nuo 0, o masyvo deklaracijoje pradinis indeksas gali būti visai nenurodytas, pavyzdžiui:

Dim Team_Members (19) Kaip eilutė

VBA kompiliatorius tokį įrašą traktuos kaip 20 elementų masyvą su indeksais nuo 0 iki 19.

Tos pačios taisyklės taikomos deklaruojant daugiamačius Visual Basic masyvus. Kaip jau parodyta viename iš pavyzdžių, deklaruojant dvimatį masyvą, jo matmenų indeksai atskiriami kableliu:

Maži sausio_pardavimo_skaičiai (nuo 1 iki 31, 1 iki 5) kaip valiuta

Tačiau jei nenurodote abiejų masyvo dimensijų pradžios indekso ir paskelbiate jį taip:

Dim sausio_Pardavimų_skaičiai(31, 5) Kaip valiuta

tada šis įrašas bus traktuojamas kaip dvimatis masyvas, kurio pirmame matmenyje yra 32 elementai su indeksais nuo 0 iki 31, o antrajame masyvo matmenyje yra 6 elementai su indeksais nuo 0 iki 5.

Dinaminiai masyvai

Visi aukščiau pateiktuose pavyzdžiuose pateikti masyvai turi fiksuotą matmenų skaičių. Tačiau daugeliu atvejų mes iš anksto nežinome, kokio dydžio turėtų būti mūsų masyvas. Iš padėties galime išeiti paskelbę didžiulį masyvą, kurio dydis tikrai bus didesnis nei būtina mūsų užduočiai. Tačiau toks sprendimas pareikalaus daug papildomos atminties ir gali sulėtinti programos veikimą. Yra geresnis sprendimas. Galime naudoti dinaminį masyvą – tai masyvas, kurio dydis gali būti nustatomas ir keičiamas bet kokį skaičių kartų makrokomandos vykdymo metu.

Dinaminis masyvas deklaruojamas tuščiais skliaustais, pavyzdžiui:

Dim Team_Members() As String

Be to, vykdydami kodą naudodami išraišką turėsite deklaruoti masyvo matmenis ReDim:

„ReDim Team_Members“ (nuo 1 iki 20)

Ir jei vykdant kodą reikia dar kartą pakeisti masyvo dydį, tada vėl galite naudoti ReDim išraišką:

Jei komandos_dydis > 20, tada ReDim Team_Members (nuo 1 iki komandos_dydžio) Pabaiga, jei

Atminkite, kad tokiu būdu pakeitus dinaminio masyvo dydį bus prarastos visos masyve saugomos reikšmės. Norint išsaugoti duomenis jau masyve, reikia naudoti raktinį žodį Išsaugotikaip parodyta žemiau:

Jei komandos_dydis > 20, tada ReDim išsaugoti komandos_narius (nuo 1 iki komandos_dydžio) Pabaiga, jei

Deja, raktinis žodis Išsaugoti galima naudoti tik norint pakeisti viršutinę masyvo matmens ribą. Tokiu būdu negalima pakeisti apatinės masyvo ribos. Be to, jei masyvas turi kelis matmenis, naudokite raktinį žodį Išsaugoti, gali būti pakeistas tik paskutinis masyvo matmuo.

Palikti atsakymą