Масівы ў Visual Basic for Application

Масівы ў Visual Basic for Application - гэта структуры, якія звычайна захоўваюць наборы звязаных зменных аднаго тыпу. Доступ да запісаў масіва ажыццяўляецца па іх лікавым індэксе.

Напрыклад, ёсць каманда з 20 чалавек, імёны якіх неабходна захаваць для наступнага выкарыстання ў кодзе VBA. Можна проста аб'явіць 20 зменных для кожнага імя, напрыклад:

Dim Team_Member1 як радок Dim Team_Member2 як радок ... Dim Team_Member20 як радок

Але вы можаце выкарыстоўваць значна больш просты і арганізаваны спосаб - захоўваць спіс імёнаў членаў каманды ў масіве з 20 зменных, такіх як Радок:

Dim Team_Members (ад 1 да 20) як радок

У паказаным вышэй радку мы аб'явілі масіў. Зараз давайце напішам значэнне для кожнага з яго элементаў, як гэта:

Team_Members(1) = "Джон Сміт"

Дадатковая перавага захавання дадзеных у масіве ў параўнанні з выкарыстаннем асобных зменных становіцца відавочнай, калі ўзнікае неабходнасць выканаць аднолькавае дзеянне з кожным элементам масіва. Калі б імёны членаў каманды захоўваліся ў 20 асобных зменных, то кожны раз трэба было б напісаць 20 радкоў кода, каб выканаць адно і тое ж дзеянне з кожным з іх. Аднак, калі імёны захоўваюцца ў масіве, вы можаце выканаць жаданае дзеянне з кожным з іх, выкарыстоўваючы просты цыкл.

Як гэта працуе, паказана ніжэй на прыкладзе кода, які паслядоўна друкуе імёны кожнага члена каманды ў ячэйках слупкоў. A актыўны ліст Excel.

For i = 1 To 20 Cells(i,1).Value = TeamMembers(i) Next i

Відавочна, што праца з масівам, які захоўвае 20 імёнаў, значна менш грувасткая і больш дакладная, чым выкарыстанне 20 асобных зменных. Але што, калі гэтых імёнаў не 20, а 1000? А калі да таго ж патрабаваць асобна весці прозвішчы і імёны па бацьку?! Зразумела, што хутка стане зусім немагчыма апрацоўваць такі аб'ём даных у кодзе VBA без дапамогі масіва.

Шматмерныя масівы ў Excel Visual Basic

Разгледжаныя вышэй масівы Visual Basic лічацца аднамернымі. Гэта азначае, што яны захоўваюць просты спіс імёнаў. Аднак масівы могуць мець некалькі вымярэнняў. Напрыклад, двухмерны масіў можна параўнаць з сеткай значэнняў.

Дапусцім, вы хочаце захаваць штодзённыя лічбы продажаў за студзень для 5 розных каманд. Для гэтага спатрэбіцца двухмерны масіў, які складаецца з 5 набораў паказчыкаў за 31 дзень. Давайце аб'явім масіў наступным чынам:

Dim Jan_Sales_Figures(ад 1 да 31, ад 1 да 5) у якасці валюты

Для доступу да элементаў масіва Лічбы_я_прадажаў, трэба выкарыстоўваць два індэксы, якія паказваюць дзень месяца і нумар каманды. Напрыклад, адрас элемента, які змяшчае лічбы продажаў для 2-ой каманды для 15-я Студзень будзе запісаны так:

Лічбы_продажаў_за_студзень(15, 2)

Такім жа чынам вы можаце аб'явіць масіў з 3 і больш вымярэннямі - проста дадайце дадатковыя вымярэнні ў аб'яву масіва і выкарыстоўвайце дадатковыя індэксы для спасылак на элементы гэтага масіва.

Аб'яўленне масіваў у Excel Visual Basic

Раней у гэтым артыкуле мы ўжо разглядалі некалькі прыкладаў аб'яўлення масіваў у VBA, але гэтая тэма заслугоўвае больш падрабязнага разгляду. Як паказана, аднамерны масіў можна аб'явіць так:

Dim Team_Members (ад 1 да 20) як радок

Такая дэкларацыя паведамляе кампілятар VBA, што масіў Удзельнікі_каманды складаецца з 20 зменных, да якіх можна атрымаць доступ па індэксах ад 1 да 20. Тым не менш, мы можам падумаць аб нумарацыі нашых зменных масіва ад 0 да 19, у гэтым выпадку масіў павінен быць аб'яўлены так:

Dim Team_Members (ад 0 да 19) як радок

Фактычна, па змаўчанні нумарацыя элементаў масіва пачынаецца з 0, а ў аб'яве масіва пачатковы індэкс можа не паказвацца наогул, напрыклад:

Dim Team_Members(19) у выглядзе радка

Кампілятар VBA будзе разглядаць такі запіс як аб'яўленне масіва з 20 элементаў з індэксамі ад 0 да 19.

Тыя ж правілы прымяняюцца пры дэкларацыі шматмерных масіваў Visual Basic. Як ужо было паказана ў адным з прыкладаў, пры аб'яўленні двухмернага масіва індэксы яго вымярэнняў падзяляюцца коскай:

Dim Jan_Sales_Figures(ад 1 да 31, ад 1 да 5) у якасці валюты

Аднак, калі вы не ўкажаце пачатковы індэкс для абодвух вымярэнняў масіва і аб'явіце яго так:

Dim Jan_Sales_Figures(31, 5) у якасці валюты

тады гэты запіс будзе разглядацца як двухмерны масіў, першае вымярэнне якога змяшчае 32 элемента з індэксамі ад 0 да 31, а другое вымярэнне масіва змяшчае 6 элементаў з індэксамі ад 0 да 5.

Дынамічныя масівы

Усе масівы ў прыведзеных вышэй прыкладах маюць фіксаваную колькасць памераў. Аднак у многіх выпадках мы не ведаем загадзя, якога памеру павінен быць наш масіў. Мы можам выйсці з сітуацыі, аб'явіўшы велізарны масіў, памер якога абавязкова будзе больш, чым неабходна для нашай задачы. Але такое рашэнне запатрабуе шмат дадатковай памяці і можа запаволіць працу праграмы. Ёсць лепшае рашэнне. Мы можам выкарыстоўваць дынамічны масіў - гэта масіў, памер якога можна ўсталяваць і змяніць любую колькасць разоў падчас выканання макраса.

Дынамічны масіў аб'яўляецца з пустымі дужкамі, як гэта:

Dim Team_Members() як радок

Далей вам трэба будзе аб'явіць памернасць масіва падчас выканання кода з дапамогай выразу ReDim:

ReDim Team_Members (ад 1 да 20)

І калі падчас выканання кода вам спатрэбіцца зноў змяніць памер масіва, то вы можаце зноў выкарыстоўваць выраз ReDim:

If Team_Size > 20 Then ReDim Team_Members(1 To Team_Size) End If

Майце на ўвазе, што змяненне памеру дынамічнага масіва такім чынам прывядзе да страты ўсіх значэнняў, якія захоўваюцца ў масіве. Для таго, каб захоўваць дадзеныя, якія ўжо знаходзяцца ў масіве, вам трэба выкарыстоўваць ключавое слова Захавацьяк паказана ніжэй:

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

На жаль, ключавое слова Захаваць можа выкарыстоўвацца толькі для змены верхняй мяжы вымярэння масіва. Ніжняя мяжа масіва не можа быць зменена такім чынам. Акрамя таго, калі масіў мае некалькі вымярэнняў, то з дапамогай ключавога слова Захаваць, можна змяніць памер толькі апошняга памеру масіва.

Пакінуць каментар