ВБА Арраис

У ВБА, ан Арраи је једна променљива која може да садржи више вредности. Замислите низ као низ ћелија: свака ћелија може да складишти вредност. Низови могу бити једнодимензионални (замислите једну колону), дводимензионални (помислите на више редова и колона) или вишедимензионални. Вредностима низа може се приступити њиховом позицијом (индексним бројем) унутар низа.

ВБА Арраи Куицк Схеет

Арраис

ОписВБА кодКреирајДим арр (1 до 3) као варијанта
арр (1) = „један“
арр (2) = „два“
арр (3) = „три“Креирајте из програма ЕкцелДим арр (1 до 3) као варијанта
Дим целл Ас Ранге, и Ас Интегер
и = ЛБоунд (арр)
За сваку ћелију у домету („А1: А3“)
и = и + 1
арр (и) = ћелија.вредност
Следећа ћелијаПрочитајте све ставкеДим и ас Лонг
За и = ЛБоунд (арр) За УБоунд (арр)
МсгБок арр (и)
Затим самИзбришиИзбриши аррНиз за низДим сНаме Ас Стринг
сНаме = Придружи се (арр, “:”)Повећајте величинуРеДим Пресерве арр (0 до 100)Подешена вредностарр (1) = 22

Брзи примери матрице ВБА

Погледајмо потпуни пример пре него што се позабавимо детаљима:

12345678910 Пример подмаре ()Дим стрНамес (1 до 4) као СтрингстрНамес (1) = "Схелли"стрНамес (2) = "Стеве"стрНамес (3) = "Неема"стрНамес (4) = "Јосе"мсгбок стрНамес (3)Енд Суб

Овде смо креирали једнодимензионални низ низова: стрНамес величине четири (могу да садрже четири вредности) и доделили четири вредности. Последњи пут приказујемо трећу вредност у оквиру за поруке.

У овом случају, корист од коришћења низа је мала: потребна је само једна декларација променљиве уместо четири.

Међутим, погледајмо пример који ће показати праву моћ низа:

12345678 Пример испод низа2 ()Дим стрНамес (1 То 60000) Ас СтрингДим и Ас ЛонгЗа и = 1 до 60000стрНамес (и) = Ћелије (и, 1) .ВредностЗатим самЕнд Суб

Овде смо створили низ који може да садржи 60.000 вредности и брзо смо попунили низ из колоне А радног листа.

Предности низа? - Брзина!

Можда ћете помислити на низове сличне Екцел радним листовима:

  • Свака ћелија (или ставка у низу) може садржати своју вредност
  • Свакој ћелији (или ставци у низу) се може приступити по положају реда и колоне.
    • Радни лист Пр. ћелије (1,4) .валуе = „Ред 1, колона 4“
    • Арраи Ек. аррВар (1,4) = „Ред 1, колона 4“

Па зашто се мучити са низовима? Зашто једноставно не читате и не записујете вредности директно у ћелије у Екцелу? Једна реч: Брзина!

Читање / писање у Екцел ћелије је спор процес. Рад са низовима је много бржи!

Направи / прогласи низ (пригушено)

Напомена: Низови могу имати више „димензија“. Да ствари буду једноставне, почећемо само са једнодимензионалним низовима. Касније у водичу ћемо вас упознати са низовима са више димензија.

Статички низ

Статички низови су низови који не могу да промене величину. Насупрот томе, Динамички низови може променити величину. Они се декларишу мало другачије. Прво, погледајмо статичке низове.

Напомена: Ако се ваш низ не мења у величини, користите статички низ.

Декларисање променљиве статичког низа је врло слично декларисању регуларне променљиве, осим што морате дефинисати величину низа. Постоји неколико различитих начина за подешавање величине низа.

Можете изричито навести почетну и завршну позицију низа:

123456789101112 Суб СтатицАрраи1 ()'Креира низ са позицијама 1,2,3,4Дим аррДемо1 (1 до 4) Ас Стринг'Креира низ са позицијама 4,5,6,7Дим аррДемо2 (4 до 7) Ас Лонг'Креира низ са позицијама 0,1,2,3Дим аррДемо3 (0 до 3) Ас ЛонгЕнд Суб

Или можете унети само величину низа:

123456 Суб СтатицАрраи2 ()'Креира низ са позицијама 0,1,2,3Дим аррДемо1 (3) Ас СтрингЕнд Суб

Важно! Уочите да низови подразумевано почињу на позицији 0. Дакле Дим аррДемо1 (3) ствара низ са позицијама 0,1,2,3.

Можете се пријавити База опција 1 на врху вашег модула тако да низ уместо тога почиње на позицији 1:

12345678 База опција 1Суб СтатицАрраи3 ()'Креира низ са позицијама 1,2,3Дим аррДемо1 (3) Ас СтрингЕнд Суб

Међутим, сматрам да је много лакше (и мање збуњујуће) само експлицитно декларисати почетну и завршну позицију низа.

Уморни сте од тражења примера ВБА кода? Испробајте АутоМацро!

Динамиц Арраи

Динамички низови су низови чија се величина може променити (или чија величина не мора бити дефинисана).

Постоје два начина за декларисање динамичког низа.

Вариант Арраис

Први начин декларисања динамичког низа је постављање низа на тип Варијанта.

1 Дим аррВар () Ас Вариант

Са Вариант Арраи, не морате дефинирати величину низа. Величина ће се аутоматски прилагодити. Само запамтите да низ почиње са позицијом 0 (осим ако не додате Оптион Басе 1 на врх вашег модула)

12345678910111213 Под ВариантАрраи ()Дим аррВар () Ас Вариант'Дефинишите вредности (величина = 0,1,2,3)аррВар = Поље (1, 2, 3, 4)'Промени вредности (величина = 0,1,2,3,4)аррВар = Поље ("1а", "2а", "3а", "4а", "5а")'Излазна позиција 4 ("5а")МсгБок аррВар (4)Енд Суб

Динамички низови који нису варијантни

Са варијантама низова морате дефинисати величину низа пре додељивања вредности низу. Међутим, процес стварања низа је мало другачији:

1234567 Суб ДинамицАрраи1 ()Дим аррДемо1 () Ас Стринг'Мења величину поља са позицијама 1,2,3,4РеДим аррДемо1 (1 до 4)Енд Суб

Прво декларишете низ, сличан статичком низу, осим што изостављате величину низа:

1 Дим аррДемо1 () Ас Стринг

Сада када желите да поставите величину низа, користите РеДим команда за величину низа:

12 'Мења величину поља са позицијама 1,2,3,4РеДим аррДемо1 (1 до 4)

РеДим мења величину низа. У наставку прочитајте разлику између РеДим и РеДим Пресерве.

РеДим вс. РеДим Пресерве

Када користите РеДим наредба да обришете све постојеће вредности из низа. Уместо тога можете користити РеДим Пресерве да бисте сачували вредности низа:

12 'Мењање величине низа са позицијама 1,2,3,4 (очување постојећих вредности)РеДим Пресерве аррДемо1 (1 до 4)

Проглашавање низова поједностављеним

Можда ћете се осећати преплављено након што прочитате све горе наведено. Да поједноставимо ствари, за остатак чланка углавном ћемо радити са статичким низовима.

Подесите вредности низа

Постављање вредности низа је врло једноставно.

Са статичким низом морате дефинисати сваку позицију низа, једну по једну:

12345678 Пример подмаре ()Дим стрНамес (1 до 4) као СтрингстрНамес (1) = "Схелли"стрНамес (2) = "Стеве"стрНамес (3) = "Неема"стрНамес (4) = "Јосе"Енд Суб

Помоћу варијантног низа можете дефинисати цео низ једним редом (практично само за мале низове):

123456 Под матрицаПример_1Лине ()Дим стрНамес () Као варијантастрНамес = Арраи ("Схелли", "Стеве", "Неема", "Јосе")Енд Суб

Ако покушате да дефинишете вредност за локацију низа која не постоји, добићете грешку Субсцрипт Оут оф Ранге:

1 стрНамес (5) = "Сханнон"

У одељку „Додели опсег низу“ У наставку ћемо вам показати како да користите петљу за брзо додељивање великог броја вредности низовима.

Добијте вредност низа

На исти начин можете дохватити вредности низа. У доњем примеру записаћемо вредности поља у ћелије:

1234 Опсег ("А1"). Вредност = стрНамес (1)Опсег ("А2"). Вредност = стрНамес (2)Опсег ("А3"). Вредност = стрНамес (3)Опсег ("А4"). Вредност = стрНамес (4)

ВБА програмирање | Генератор кода ради за вас!

Додели опсег низу

За додељивање опсега низу можете користити петљу:

12345678 Под РангеТоАрраи ()Дим стрНамес (1 То 60000) Ас СтрингДим и Ас ЛонгЗа и = 1 до 60000стрНамес (и) = Ћелије (и, 1) .ВредностЗатим самЕнд Суб

Ово ће проћи кроз ћелије А1: А60000, додељујући вредности ћелија низу.

Излазни низ у опсег

Или можете користити петљу да бисте низу доделили низ:

123 За и = 1 до 60000Ћелије (и, 1). Вредност = стрНамес (и)Затим сам

Ово ће учинити обрнуто: доделити вредности низа ћелијама А1: А60000

2Д / вишедимензионални низови

До сада смо радили искључиво са једнодимензионалним (1Д) низовима. Међутим, низови могу имати до 32 димензије.

Замислите 1Д низ као један ред или колону Екцел ћелија, 2Д низ као читав Екцел радни лист са више редова и колона, а 3Д низ је попут целе радне свеске, која садржи више листова од којих сваки садржи више редова и колона (Ви такође могао замислити 3Д низ као Рубикову коцку).

Примери вишедимензионалних низова

Покажимо сада примере рада са низовима различитих димензија.

ВБА програмирање | Генератор кода ради за вас!

Пример 1Д низа

Ова процедура комбинује претходне примере низа у једну процедуру, показујући како можете користити низове у пракси.

1234567891011121314 Суб АрраиЕк_1д ()Дим стрНамес (1 То 60000) Ас СтрингДим и Ас Лонг'Доделите вредности низуЗа и = 1 до 60000стрНамес (и) = Ћелије (и, 1) .ВредностЗатим сам'Вредности излазног низа у опсегЗа и = 1 до 60000Табеле („Излаз“). Ћелије (и, 1) .Вредност = стрНамес (и)Затим самЕнд Суб

Пример 2Д низа

Ова процедура садржи пример 2Д низа:

123456789101112131415161718 Суб АрраиЕк_2д ()Дим стрНамес (1 То 60000, 1 То 10) Ас СтрингДим и Ас Лонг, ј Ас Лонг'Доделите вредности низуЗа и = 1 до 60000За ј = 1 до 10стрНамес (и, ј) = Ћелије (и, ј) .ВредностСледеће јЗатим сам'Вредности излазног низа у опсегЗа и = 1 до 60000За ј = 1 до 10Табеле („Излаз“). Ћелије (и, ј). Вредност = стрНамес (и, ј)Следеће јЗатим самЕнд Суб

Пример 3Д низа

Ова процедура садржи пример 3Д низа за рад са више листова:

12345678910111213141516171819202122 Суб АрраиЕк_3д ()Дим стрНамес (1 То 60000, 1 То 10, 1 То 3) Ас СтрингДим и Ас Лонг, ј Ас Лонг, к Ас Лонг'Доделите вредности низуЗа к = 1 до 3За и = 1 до 60000За ј = 1 до 10стрНамес (и, ј, к) = Схеетс ("Схеет" & к). Целлс (и, ј) .ВредностСледеће јЗатим самСледеће к'Вредности излазног низа у опсегЗа к = 1 до 3За и = 1 до 60000За ј = 1 до 10Табеле ("Излаз" & к). Ћелије (и, ј). Вредност = стрНамес (и, ј, к)Следеће јЗатим самСледеће кЕнд Суб

Дужина / величина поља

До сада смо вас упознали са различитим врстама низова и научили вас како да декларишете низове и добијете/поставите вредности низа. Затим ћемо се фокусирати на друге неопходне теме за рад са низовима.

ВБА програмирање | Генератор кода ради за вас!

УБоунд и ЛБоунд функције

Први корак до добијања дужине / величине низа је коришћење функција УБоунд и ЛБоунд за добијање горње и доње границе низа:

123456 Суб УБоундЛБоунд ()Дим стрНамес (1 То 4) Ас СтрингМсгБок УБоунд (стрНамес)МсгБок ЛБоунд (стрНамес)Енд Суб

Одузимањем два (и додавањем 1) добићете дужину:

1 ГетАррЛенгтх = УБоунд (стрНамес) - ЛБоунд (стрНамес) + 1

Функција дужине низа

Ево функције за добијање дужине низа од једне димензије:

1234567 Јавна функција ГетАррЛенгтх (а Ас Вариант) Ас ЛонгАко је ИсЕмпти (а) ТадаГетАррЛенгтх = 0ИначеГетАррЛенгтх = УБоунд (а) - ЛБоунд (а) + 1Крај АкоЗавршна функција

Требате израчунати величину 2Д низа? Погледајте наш водич: Израчунајте величину низа.

Лооп Тхроугх Арраи

Постоје два начина за пролажење кроз низ. Први се петља кроз целе бројеве који одговарају бројним позицијама низа. Ако знате величину низа, можете је навести директно:

12345678910111213 Пример поднареда_Претва1 ()Дим стрНамес (1 То 4) Ас СтрингДим и Ас ЛонгстрНамес (1) = "Схелли"стрНамес (2) = "Стеве"стрНамес (3) = "Неема"стрНамес (4) = "Јосе"За и = 1 до 4МсгБок стрНамес (и)Затим самЕнд Суб

Међутим, ако не знате величину низа (ако је низ динамичан), можете користити функције ЛБоунд и УБоунд из претходног одељка:

12345678910111213 Суб АрраиЕкампле_Лооп2 ()Дим стрНамес (1 То 4) Ас СтрингДим и Ас ЛонгстрНамес (1) = "Схелли"стрНамес (2) = "Стеве"стрНамес (3) = "Неема"стрНамес (4) = "Јосе"За и = ЛБоунд (стрНамес) За УБоунд (стрНамес)МсгБок стрНамес (и)Затим самЕнд Суб

За сваку петљу низа

Друга метода је са Фор Фор Лооп. Ово се понавља кроз сваку ставку у низу:

12345678910111213 Примјер под -низа_Лооп3 ()Дим стрНамес (1 То 4) Ас СтрингДим ИтемстрНамес (1) = "Схелли"стрНамес (2) = "Стеве"стрНамес (3) = "Неема"стрНамес (4) = "Јосе"За сваку ставку у стрНамесМсгБок ИтемСледећа ставкаЕнд Суб

Петља за сваки низ радиће и са вишедимензионалним низовима поред једнодимензионалних низова.

ВБА програмирање | Генератор кода ради за вас!

Лооп Тхроугх 2Д Арраи

Такође можете користити функције УБоунд и ЛБоунд да бисте прошли кроз вишедимензионални низ. У овом примеру ћемо проћи кроз 2Д низ. Уочите да вам функције УБоунд и ЛБоунд омогућавају да наведете коју димензију низа ћете пронаћи горњу и доњу границу (1 за прву димензију, 2 за другу димензију).

1234567891011121314151617181920 Суб АрраиЕкампле_Лооп4 ()Дим стрНамес (1 То 4, 1 То 2) Ас СтрингДим и Ас Лонг, ј Ас ЛонгстрНамес (1, 1) = "Схелли"стрНамес (2, 1) = "Стеве"стрНамес (3, 1) = "Неема"стрНамес (4, 1) = "Јосе"стрНамес (1, 2) = "Схелби"стрНамес (2, 2) = "Стевен"стрНамес (3, 2) = "Немо"стрНамес (4, 2) = "Јессе"За ј = ЛБоунд (стрНамес, 2) За УБоунд (стрНамес, 2)За и = ЛБоунд (стрНамес, 1) За УБоунд (стрНамес, 1)МсгБок стрНамес (и, ј)Затим самСледеће јЕнд Суб

Остали задаци низа

Цлеар Арраи

Да бисте обрисали читав низ, користите изјаву о брисању:

1 Избришите стрНамес

Пример употребе:

12345678910 Пример подмаре ()Дим стрНамес (1 до 4) као СтрингстрНамес (1) = "Схелли"стрНамес (2) = "Стеве"стрНамес (3) = "Неема"стрНамес (4) = "Јосе"Избришите стрНамесЕнд Суб

Алтернативно, можете и поново прилагодити низ како бисте му променили величину, чистећи део низа:

1 РеДим стрНамес (1 до 2)

Ово мења величину низа на величину 2, бришући позиције 3 и 4.

Гроф Арраи

Можете избројати број позиција у свакој димензији низа помоћу функција УБоунд и ЛБоунд (о којима је горе речено).

Број унетих ставки (или ставки које задовољавају одређене критеријуме) такође можете избројати петљањем кроз низ.

Овај пример ће проћи кроз низ објеката и бројати број низова који нису празни пронађени у низу:

123456789101112131415 Суб АрраиЛоопандЦоунт ()Дим стрНамес (1 То 4) Ас СтрингДим и Ас Лонг, н Ас ЛонгстрНамес (1) = "Схелли"стрНамес (2) = "Стеве"За и = ЛБоунд (стрНамес) За УБоунд (стрНамес)Ако стрНамес (и) "" Тадан = н + 1Крај АкоЗатим самМсгБок н & "пронађене су вредности које нису празне."Енд Суб

ВБА програмирање | Генератор кода ради за вас!

Уклоните дупликате

У неком тренутку ћете можда желети да уклоните дупликате из низа. Нажалост, ВБА нема уграђену функцију за то. Међутим, написали смо функцију за уклањање дупликата из низа (предуго је за укључивање у овај водич, али посетите везу да бисте сазнали више).

Филтер

ВБА функција филтрирања вам омогућава да филтрирате низ. То чини стварањем новог низа само са филтрираним вредностима. Испод је кратак пример, али свакако прочитајте чланак за више примера за различите потребе.

1234567891011121314 Подфилтер_подударања ()'Дефине АрраиДим стрНамес Ас ВариантстрНамес = Арраи ("Стеве Смитх", "Сханнон Смитх", "Риан Јохнсон")'Низ филтераДим стрСубНамес Ас ВариантстрСубНамес = Филтер (стрНамес, "Смитх")'Броји филтрирани низМсгБок "Пронађено" & УБоунд (стрСубНамес) - ЛБоунд (стрСубНамес) + 1 & "имена."Енд Суб

ИсАрраи функција

Можете проверити да ли је променљива низ помоћу функције ИсАрраи:

123456789101112 Суб ИсАрраиЕк ()'Креира низ са позицијама 1,2,3Дим аррДемо1 (3) Ас Стринг'Креира регуларну променљиву стрингаДим стр Ас СтрингМсгБок ИсАрраи (аррДемо1)МсгБок ИсАрраи (стр)Енд Суб

Придружите се Арраи -у

Можете брзо да се „придружите“ читавом низу заједно са функцијом придруживања:

123456789101112 Суб Арраи_Јоин ()Дим стрНамес (1 То 4) Ас СтрингЗатамните имена придруживања као низстрНамес (1) = "Схелли"стрНамес (2) = "Стеве"стрНамес (3) = "Неема"стрНамес (4) = "Јосе"јоинНамес = Придружи се (стрНамес, ",")МсгБок јоинНамесЕнд Суб

ВБА програмирање | Генератор кода ради за вас!

Поделите низ у низ

ВБА Сплит функција ће поделити низ текста у низ који садржи вредности из оригиналног низа. Погледајмо пример:

123456789 Суб Арраи_Сплит ()Дим Намес () Ас СтрингДим јоинедНамес Ас СтрингјоинНамес = "Схелли, Стеве, Нема, Јосе"Намес = Сплит (јоинедНамес, ",")МсгБок Имена (1)Енд Суб

Овде смо овај низ текста „Схелли, Стеве, Нема, Јосе“ поделили на низ (величина 4) помоћу граничника зареза (, ”).

Цонст Арраи

Ан Арраи не може бити декларисан као константа у ВБА. Међутим, ово можете заобићи стварањем функције која ће се користити као низ:

123456789 'Дефинишите ЦонстантАрраиФункција ЦонстантАрраи ()ЦонстантАрраи = Поље (4, 12, 21, 100, 5)Завршна функција'Дохвати вредност ЦонстантАрраиСуб РетриевеВалуес ()МсгБок ЦонстантАрраи (3)Енд Суб

Цопи Арраи

Не постоји уграђен начин за копирање низа помоћу ВБА. Уместо тога, мораћете да користите петљу за додељивање вредности из једног низа у други.

12345678910111213141516171819 Суб ЦопиАрраи ()Дим Арр1 (1 То 100) Ас ЛонгДим Арр2 (1 То 100) Ас ЛонгДим и Ас Лонг'Направи низ1За и = 1 до 100Арр1 (и) = иЗатим сам'ЦопиАрраи1 у Арраи2За и = 1 до 100Арр2 (и) = Арр1 (и)Затим самМсгБок Арр2 (74)Енд Суб

Транспонирај

Не постоји уграђена ВБА функција која вам омогућава транспоновање низа. Међутим, написали смо функцију за транспоновање 2Д низа. Прочитајте чланак да бисте сазнали више.

ВБА програмирање | Генератор кода ради за вас!

Функција Ретурн Арраи

Уобичајено питање које ВБА програмери имају је како да креирају функцију која враћа низ. Мислим да се већина тешкоћа решава коришћењем варијантних низова. Написали смо чланак на тему: ВРА функција повратног низа функција.

Коришћење низа у Аццесс ВБА

Већина горе наведених примера низа ради потпуно исто у Аццесс ВБА као и у Екцел ВБА. Једна велика разлика је у томе што када желите да попуните низ помоћу Аццесс података, морали бисте да прођете кроз објекат РецордСет, а не објекат Ранге.

1234567891011121314151617181920212223 Под РангеТоАрраиАццесс ()На Грешка Настави даљеДим стрНамес () Ас СтрингДим и Ас ЛонгДим иЦоунт Ас ЛонгДим дбс као база податакаДим рст Ас РецордсетСет дбс = ЦуррентДбПостави рст = дбс.ОпенРецордсет ("тблЦлиентс", дбОпенДинасет)Са првим.МовеЛаст.МовеФирстиЦоунт = .РецордЦоунтРеДим стрНамес (1 За иЦоунт)За и = 1 За иЦоунтстрНамес (и) = рст.Фиелдс ("ЦлиентНаме").МовеНектЗатим самЗавршитирст.ЦлосеСет рст = НиштаПоставите дбс = НиштаЕнд Суб
Арраи Туториалс
Мега-водич кроз низда
Добијте величину низа
Цлеар Арраи
Филтер Арраи
Транспонирај низ
Функција Ретурн Арраи
Уклоните дупликате

Ви ће помоћи развој сајта, дељење страницу са пријатељима

wave wave wave wave wave