Mga Array sa Visual Basic para sa Application

Ang mga array sa Visual Basic para sa Application ay mga istruktura na karaniwang nag-iimbak ng mga hanay ng mga kaugnay na variable ng parehong uri. Ang mga array entry ay ina-access ng kanilang numerical index.

Halimbawa, mayroong isang pangkat ng 20 tao na ang mga pangalan ay kailangang i-save para magamit sa ibang pagkakataon sa VBA code. Ang isa ay maaaring magpahayag lamang ng 20 mga variable upang hawakan ang bawat pangalan, tulad nito:

Dim Team_Member1 Bilang String Dim Team_Member2 Bilang String ... Dim Team_Member20 Bilang String

Ngunit maaari kang gumamit ng mas simple at mas organisadong paraan - mag-imbak ng listahan ng mga pangalan ng miyembro ng koponan sa hanay ng 20 variable tulad ng Pisi:

Dim Team_Members(1 To 20) Bilang String

Sa linyang ipinakita sa itaas, nagdeklara kami ng isang array. Ngayon magsulat tayo ng halaga sa bawat elemento nito, tulad nito:

Team_Members(1) = "John Smith"

Ang isang karagdagang bentahe ng pag-iimbak ng data sa isang array, kumpara sa paggamit ng hiwalay na mga variable, ay nagiging maliwanag kapag ito ay kinakailangan upang isagawa ang parehong aksyon sa bawat elemento ng array. Kung ang mga pangalan ng mga miyembro ng koponan ay naka-store sa 20 magkahiwalay na variable, aabutin ng 20 linya ng code ang pagsulat sa bawat oras upang maisagawa ang parehong aksyon sa bawat isa sa kanila. Gayunpaman, kung ang mga pangalan ay naka-imbak sa isang array, maaari mong gawin ang nais na aksyon sa bawat isa sa kanila gamit ang isang simpleng loop.

Kung paano ito gumagana ay ipinapakita sa ibaba gamit ang isang halimbawa ng code na nagpi-print ng mga pangalan ng bawat miyembro ng team nang sunud-sunod sa mga cell ng column. A aktibong Excel worksheet.

Para sa i = 1 Hanggang 20 Cell(i,1).Halaga = Team_Members(i) Susunod i

Malinaw, ang pagtatrabaho sa isang array na nag-iimbak ng 20 mga pangalan ay hindi gaanong masalimuot at mas tumpak kaysa sa paggamit ng 20 magkahiwalay na variable. Ngunit paano kung ang mga pangalan na ito ay hindi 20, ngunit 1000? At kung, bilang karagdagan, kinakailangan na panatilihing hiwalay ang mga apelyido at patronymics?! Malinaw na malapit nang maging ganap na imposibleng pangasiwaan ang ganoong dami ng data sa VBA code nang walang tulong ng isang array.

Mga multidimensional na array sa Excel Visual Basic

Ang mga Visual Basic array na tinalakay sa itaas ay itinuturing na one-dimensional. Nangangahulugan ito na nag-iimbak sila ng isang simpleng listahan ng mga pangalan. Gayunpaman, ang mga array ay maaaring magkaroon ng maraming dimensyon. Halimbawa, ang isang two-dimensional na array ay maaaring ihambing sa isang grid ng mga halaga.

Sabihin nating gusto mong i-save ang pang-araw-araw na mga benta para sa Enero para sa 5 magkakaibang koponan. Mangangailangan ito ng two-dimensional array na binubuo ng 5 set ng mga sukatan sa loob ng 31 araw. Ipahayag natin ang isang array tulad nito:

Dim Jan_Sales_Figures(1 To 31, 1 To 5) Bilang Currency

Upang ma-access ang mga elemento ng array Jan_Sales_Figures, kailangan mong gumamit ng dalawang index na nagsasaad ng araw ng buwan at ang command number. Halimbawa, ang address ng isang elemento na naglalaman ng mga numero ng benta para sa 2-oh mga koponan para sa Ika-15 ng taon Ang Enero ay isusulat ng ganito:

Jan_Sales_Figures(15, 2)

Sa parehong paraan, maaari kang magdeklara ng array na may 3 o higit pang mga dimensyon - magdagdag lamang ng mga karagdagang dimensyon sa deklarasyon ng array at gumamit ng mga karagdagang indeks upang sumangguni sa mga elemento ng array na ito.

Pagdedeklara ng mga Array sa Excel Visual Basic

Mas maaga sa artikulong ito, tumingin na kami sa ilang mga halimbawa ng pagdedeklara ng mga array sa VBA, ngunit ang paksang ito ay nararapat na masusing tingnan. Tulad ng ipinapakita, ang isang one-dimensional na array ay maaaring ideklara tulad nito:

Dim Team_Members(1 To 20) Bilang String

Ang nasabing deklarasyon ay nagsasabi sa VBA compiler na ang array Team_Miyembro ay binubuo ng 20 variable na maaaring ma-access sa mga indeks mula 1 hanggang 20. Gayunpaman, maaari nating isipin ang paglalagay ng numero sa ating mga variable ng array mula 0 hanggang 19, kung saan ang array ay dapat na ideklara tulad nito:

Dim Team_Members(0 To 19) Bilang String

Sa katunayan, bilang default, ang pagnunumero ng mga elemento ng array ay nagsisimula sa 0, at sa deklarasyon ng array, ang paunang index ay maaaring hindi tinukoy, tulad nito:

Dim Team_Members(19) Bilang String

Ituturing ng VBA compiler ang naturang entry bilang pagdedeklara ng hanay ng 20 elemento na may mga indeks mula 0 hanggang 19.

Nalalapat ang parehong mga panuntunan kapag nagdedeklara ng mga multidimensional na Visual Basic na array. Tulad ng ipinakita na sa isa sa mga halimbawa, kapag nagdedeklara ng dalawang-dimensional na hanay, ang mga indeks ng mga sukat nito ay pinaghihiwalay ng kuwit:

Dim Jan_Sales_Figures(1 To 31, 1 To 5) Bilang Currency

Gayunpaman, kung hindi ka tumukoy ng panimulang index para sa parehong dimensyon ng array at ipahayag ito nang ganito:

Dim Jan_Sales_Figures(31, 5) Bilang Currency

pagkatapos ang entry na ito ay ituturing bilang isang two-dimensional array, ang unang dimensyon ay naglalaman ng 32 elemento na may mga indeks mula 0 hanggang 31, at ang pangalawang dimensyon ng array ay naglalaman ng 6 na elemento na may mga indeks mula 0 hanggang 5.

Mga Dynamic na array

Ang lahat ng mga array sa mga halimbawa sa itaas ay may nakapirming bilang ng mga dimensyon. Gayunpaman, sa maraming mga kaso hindi namin alam nang maaga kung ano ang laki ng aming array. Makakaalis tayo sa sitwasyon sa pamamagitan ng pagdedeklara ng malaking hanay, ang laki nito ay tiyak na mas malaki kaysa kinakailangan para sa ating gawain. Ngunit ang ganitong solusyon ay mangangailangan ng maraming dagdag na memorya at maaaring makapagpabagal sa programa. May mas magandang solusyon. Maaari kaming gumamit ng isang dynamic na array – ito ay isang array na ang laki ay maaaring itakda at baguhin anumang bilang ng beses sa panahon ng pagpapatupad ng isang macro.

Ang isang dynamic na array ay ipinahayag na may mga walang laman na panaklong, tulad nito:

Dim Team_Members() Bilang String

Susunod, kakailanganin mong ideklara ang dimensyon ng array sa panahon ng pagpapatupad ng code gamit ang expression ReDim:

ReDim Team_Members(1 Hanggang 20)

At kung sa panahon ng pagpapatupad ng code kailangan mong baguhin muli ang laki ng array, maaari mong gamitin muli ang expression ng ReDim:

Kung Team_Size > 20 Pagkatapos ReDim Team_Members(1 To Team_Size) End If

Tandaan na ang pagbabago ng laki ng dynamic na array sa ganitong paraan ay magreresulta sa pagkawala ng lahat ng value na nakaimbak sa array. Upang mag-imbak ng data na nasa array, kailangan mong gamitin ang keyword Panatilihintulad ng ipinapakita sa ibaba:

Kung Team_Size > 20 Pagkatapos ReDim Preserve Team_Members(1 To Team_Size) End If

Sa kasamaang palad ang keyword Panatilihin magagamit lang para baguhin ang upper bound ng isang array dimension. Ang lower bound ng isang array ay hindi mababago sa ganitong paraan. Gayundin, kung ang array ay may maraming dimensyon, pagkatapos ay gamitin ang keyword Panatilihin, tanging ang huling dimensyon ng array ang maaaring baguhin ang laki.

Mag-iwan ng Sagot