Ìàññèâû VBA (÷.2). Îáúÿâëåíèå è èñïîëüçîâàíèå ìàññèâîâ
Îáúÿâëåíèå ìàññèâîâ
Îáúÿâëåíèå ìàññèâà ñ èñïîëüçîâàíèåì îïåðàòîðà Dim èìååò ñëåäóþùèé ñèíòàêñèñ:
Dim VarName([Subscripts]) [As Type]
VarName - ëþáîå èìÿ ìàññèâà, èñïîëüçóþùåå äîïóñòèìûé èäåíòèôèêàòîð èìåíè;
Subscripts - èçìåðåíèå ìàññèâà. Åñëè ðàçìåðíîñòü ìàññèâà áîëüøå åäèíèöû, òî Subscripts ðàçäåëÿþòñÿ çàïÿòûìè.
Îïåðàòîð Subscripts èìååò ñëåäóþùèé ñèíòàêñèñ:
[lower To] upper [,[lower To] upper]..
lower - îïðåäåëÿåò íèæíèé äèàïàçîí äîïóñòèìûõ èíäåêñîâ äëÿ ìàññèâà (íåîáÿçàòåëüíûé àðãóìåíò);
upper - îïðåäåëÿåò âåðõíèé ïðåäåë äëÿ èíäåêñîâ ìàññèâà (îáÿçàòåëüíûé àðãóìåíò).
Ïðèìåðû ïðàâèëüíîãî îáúÿâëåíèÿ ìàññèâîâ:
Dim Array_Str (1 To 10) As String - îäíîìåðíûé ñòàòè÷åñêèé ñòðîêîâûé ìàññèâ, âêëþ÷àþùèé 10 ýëåìåíòîâ;
Dim Array_Var() - äèíàìè÷åñêèé ìàññèâ;
Dim Array_Mult (0 To 5, 0 To 7) As Integer - äâóìåðíûé ñòàòè÷åñêèé ìàññèâ öåëûõ ÷èñåë, âêëþ÷àþùèé 6*8=48 ýëåìåíòîâ.
Ïðè îáúÿâëåíèè ìàññèâîâ ñëåäóåò ïîìíèòü, ÷òî âêëþ÷åíèå îïåðàòîðà Subscripts â îáúÿâëåíèè ìàññèâà ñîçäàåò ñòàòè÷åñêèé ìàññèâ ñ ôèêñèðîâàííûì ÷èñëîì ýëåìåíòîâ, ïðîïóñê îïåðàòîðà Subscripts â îáúÿâëåíèè ìàññèâà ñîçäàåò äèíàìè÷åñêèé ìàññèâ, à óñòàíîâêà äèðåêòèâû êîìïèëÿòîðà Option Base âëèÿåò íà îáùåå ÷èñëî ýëåìåíòîâ â ìàññèâå.
Èñïîëüçîâàíèå ìàññèâîâ
Äëÿ äîñòóïà ê ýëåìåíòó ìàññèâà íåîáõîäèìî óêàçûâàòü èìÿ ìàññèâà, çà êîòîðûì ñëåäóåò çíà÷åíèå èíäåêñà, çàêëþ÷åííîå â êðóãëûå ñêîáêè.
Íèæåïðèâåäåííûé ëèñòèíã ïîêàçûâàåò ýëåìåíòàðíîå îáúÿâëåíèå è èñïîëüçîâàíèå ìàññèâà (â êà÷åñòâå ýëåìåíòîâ ìàññèâà èñïîëüçóåòñÿ ôàêòîðèàë íîìåðà ýëåìåíòà ìàññèâà):

Ïðè ïîìîùè âëîæåííûõ öèêëîâ äîâîëüíî ëåãêî ìîæíî îðãàíèçîâàòü èíèöèàëèçàöèþ äâóìåðíîãî ìàññèâà:

Èçìåíåíèå ðàçìåðíîñòè äèíàìè÷åñêîãî ìàññèâà
Ìîãóò ñëîæèòüñÿ îáñòîÿòåëüñòâà, ïðè êîòîðûõ òî÷íî íåèçâåñòíî, ñêîëüêî ýëåìåíòîâ ïîòðåáóåòñÿ â ìàññèâå.  VBA èìååòñÿ âîçìîæíîñòü ïðè ïîìîùè îïåðàòîðà ReDim ïåðåîïðåäåëÿòü ðàçìåðíîñòü ìàññèâà, à âî âðåìÿ îáúÿâëåíèÿ íå óêàçûâàòü åãî ðàçìåðíîñòü.
Ñèíòàêñèñ ReDim:
ReDim [Preserve] varname(subscripts) [As Type] [, varname(subscripts) [As Type]]
varname - èìÿ ñóùåñòâóþùåãî ìàññèâà;
subscripts - ðàçìåðíîñòü ñóùåñòâóþùåãî ìàññèâà;
Type - ëþáîé òèï VBA. Íåîáõîäèìî èñïîëüçîâàòü îòäåëüíûé îïåðàòîð As Type äëÿ êàæäîãî ìàññèâà, êîòîðûé îïðåäåëÿåòñÿ;
Preserve - íåîáÿçàòåëüíûé àðãóìåíò. Åãî èñïîëüçîâàíèå ïðèâîäèò ê òîìó, ÷òî äàííûå óæå èìåþùèåñÿ â ìàññèâå, ñîõðàíÿþòñÿ ïîñëå èçìåíåíèÿ åãî ðàçìåðíîñòè.
Ïðèìåðû ïðàâèëüíîãî èñïîëüçîâàíèÿ îïåðàòîðà ReDim:
Dim Array_Month() As String - îäíîìåðíûé ñòðîêîâûé äèíàìè÷åñêèé ìàññèâ
ReDim Array_Month(29) - óñòàíàâëèâåò ðàçìåðíîñòü äèíàìè÷åñêîãî ìàññèâà ðàâíóþ 29 ýëåìåíòàì
ReDim Array_Month(1 To 30) - èçìåíÿåò ðàçìåð ìàññèâà äî 30 ýëåìåíòà
ReDim Preserve Array_Month(1 To 31) - èçìåíÿåò ðàçìåð ìàññèâà äî 31 ýëåìåíòà, ñîõðàíÿÿ ñîäåðæèìîå
Dim Array_DBL() As Single - îáúÿâëÿåò äèíàìè÷åñêèé ìàññèâ
ReDim Array_DBL(2, 9) - äåëàåò ìàññèâ äâóìåðíûì
ReDim Array_DBL(3, 7) - èçìåíÿåò ðàçìåð äâóìåðíîãî ìàññèâà
ReDim Preserve Array_DBL(1 To 3, 1 To 5) - èçìåíÿåò ïîñëåäíèé ðàçìåð ìàññèâà, ñîõðàíÿÿ ñîäåðæèìîå
Îáðàòèòå âíèìàíèå! Ìîæíî èçìåíÿòü òîëüêî ïîñëåäíåå èçìåðåíèå ìíîãîìåðíîãî ìàññèâà, êîãäà èñïîëüçóåòñÿ êëþ÷åâîå ñëîâî Preserve.