Колдонмо үчүн Visual Basicтеги массивдер

Колдонуу үчүн Visual Basic'теги массивдер, адатта, бир түрдөгү тиешелүү өзгөрмөлөрдүн топтомун сактаган структуралар. Массив жазууларына алардын сандык индекси аркылуу кирүүгө болот.

Мисалы, VBA кодунда кийинчерээк колдонуу үчүн аттары сакталышы керек болгон 20 адамдан турган команда бар. Ар бир аталышты кармоо үчүн 20 өзгөрмө жарыялоого болот, мисалы:

Dim Team_member1 as String Dim Team_member2 as String ... Dim Team_member20 as String

Бирок сиз бир топ жөнөкөй жана уюшкан ыкманы колдонсоңуз болот – команда мүчөлөрүнүн ысымдарынын тизмесин 20 өзгөрмөлүү массивде сактаңыз. аркан:

Команда_мүчөсү (1ден 20га чейин) сап катары

Жогоруда көрсөтүлгөн сапта биз массив жарыяладык. Эми анын ар бир элементине төмөнкүдөй маани жазалы:

Team_members(1) = "Джон Смит"

Массивде маалыматтарды сактоонун кошумча артыкчылыгы, өзүнчө өзгөрмөлөрдү колдонууга салыштырмалуу, массивдин ар бир элементинде бир эле аракетти аткаруу зарыл болгондо айкын болот. Эгерде команда мүчөлөрүнүн аты-жөнү 20 өзүнчө өзгөрмөдө сакталган болсо, анда алардын ар бирине бир эле аракетти аткаруу үчүн ар бир жолу жазуу үчүн 20 сап код талап кылынат. Бирок, эгерде аттар массивде сакталса, анда сиз алардын ар бири менен жөнөкөй циклди колдонуу менен каалаган аракетти аткара аласыз.

Ал кандайча иштейт, төмөндө ар бир команда мүчөсүнүн аты-жөнүн ырааттуу түрдө мамычанын уячаларында басып чыгарган код мисалы менен көрсөтүлгөн. A активдүү Excel иш барагы.

i үчүн = 1ден 20га чейин уячалар(i,1).Мааниси = Команда_мүчөсү(i) Кийинки 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да массивдерди жарыялоонун бир нече мисалдарын карап чыктык, бирок бул тема жакшыраак карап чыгууга татыктуу. Көрсөтүлгөндөй, бир өлчөмдүү массив төмөнкүдөй жарыяланышы мүмкүн:

Команда_мүчөсү (1ден 20га чейин) сап катары

Мындай декларация VBA компиляторуна массивди билдирет Команданын_мүчөлөрү 20ден 1га чейинки индекстерде жеткиликтүү болгон 20 өзгөрмөдөн турат. Бирок, биз массивдин өзгөрмөлөрүбүздү 0дөн 19га чейин номерлөө жөнүндө ойлонушубуз мүмкүн, бул учурда массив төмөнкүдөй жарыяланышы керек:

Команда_мүчөсү (0ден 19га чейин) сап катары

Чынында, демейки боюнча, массив элементтеринин номери 0дөн башталат жана массивдин декларациясында баштапкы индекс такыр көрсөтүлбөшү мүмкүн, мисалы:

Dim Команда_мүчөсү(19) String катары

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() As String

Андан кийин, туюнтманы колдонуу менен кодду аткаруу учурунда массивдин өлчөмүн жарыялоо керек болот ReDim:

ReDim командасынын_мүчөсү(1ден 20га чейин)

Жана эгер кодду аткаруу учурунда массивдин өлчөмүн кайра өзгөртүү керек болсо, анда сиз ReDim туюнтмасын кайра колдонсоңуз болот:

Эгерде Команда_Өлчөмү > 20 болсо, анда ReDim Командасынын_Мүчөсү (1 Команданын_Өлчөмүнө) Аяктоо

Динамикалык массивдин өлчөмүн ушундай жол менен өзгөртүү массивде сакталган бардык маанилердин жоголушуна алып келерин унутпаңыз. Массивдеги маалыматтарды сактоо үчүн сиз ачкыч сөздү колдонушуңуз керек сактооТөмөндө көрсөтүлгөндөй:

Эгерде Команда_Өлчөмү > 20 болсо, анда Команда_мүчөлөрүн ReDim сактайт (Команда_Өлчөмүнө 1) Аяктоо Эгерде

Тилекке каршы, ачкыч сактоо массив өлчөмүнүн жогорку чегин өзгөртүү үчүн гана колдонулушу мүмкүн. Массивдин төмөнкү чегин мындай жол менен өзгөртүү мүмкүн эмес. Ошондой эле, массив бир нече өлчөмгө ээ болсо, анда ачкыч сөздү колдонуңуз сактоо, массивдин акыркы өлчөмүнүн гана өлчөмүн өзгөртүүгө болот.

Таштап Жооп