Массивҳо дар Visual Basic барои барнома

Массивҳо дар Visual Basic for Application сохторҳое мебошанд, ки маъмулан маҷмӯи тағирёбандаҳои алоқаманди як навъро нигоҳ медоранд. Ба вурудоти массив тавассути индекси ададии онҳо дастрасӣ пайдо мекунанд.

Масалан, як гурӯҳи иборат аз 20 нафар вуҷуд дорад, ки номҳои онҳо бояд барои истифодаи минбаъда дар коди VBA захира карда шаванд. Барои нигоҳ доштани ҳар як ном метавон танҳо 20 тағирёбанда эълон кард, масалан:

Dim Team_Member1 As String Dim Team_Uzi2 Ҳамчун сатр ... Dim Team_Member20 ҳамчун сатр

Аммо шумо метавонед роҳи хеле соддатар ва муташаккилро истифода баред - рӯйхати номҳои аъзои дастаро дар массиви 20 тағирёбанда нигоҳ доред, ба монанди сатр:

Аъзоёни Team_Dim(1 то 20) Ҳамчун сатр

Дар сатри дар боло нишондодашуда мо массив эълон кардем. Акнун биёед ба ҳар як унсури он арзиш нависем, масалан:

Аъзоёни даста(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 рӯз лозим аст. Биёед массивро чунин эълон кунем:

Рақамҳои январ_фурӯши хира (1 то 31, 1 то 5) ҳамчун асъор

Барои дастрасӣ ба элементҳои массив Рақамҳои_фурӯши_январ, шумо бояд ду индексеро, ки рӯзи моҳ ва рақами фармонро нишон медиҳанд, истифода баред. Масалан, суроғаи унсури дорои рақамҳои фурӯш барои 2-оҳ дастаҳо барои 15 ҳазор Январ чунин навишта мешавад:

Рақамҳои_фурӯши_январ(15, 2)

Ба ҳамин тариқ, шумо метавонед массивро бо 3 ё зиёда андоза эълон кунед - танҳо ба эъломияи массив андозаҳои иловагӣ илова кунед ва индексҳои иловагиро барои истинод ба унсурҳои ин массив истифода баред.

Эълон кардани массивҳо дар Excel Visual Basic

Пештар дар ин мақола, мо аллакай якчанд мисолҳои эълони массивҳоро дар VBA дида будем, аммо ин мавзӯъ сазовори баррасии амиқ аст. Тавре ки нишон дода шудааст, массиви якченакаро метавон чунин эълон кард:

Аъзоёни Team_Dim(1 то 20) Ҳамчун сатр

Чунин эъломия ба compiler VBA мегӯяд, ки массив Аъзоёни даста аз 20 тағирёбанда иборат аст, ки онҳоро дар индексҳои аз 1 то 20 дастрас кардан мумкин аст. Аммо, мо метавонем дар бораи рақамгузории тағирёбандаҳои массивамон аз 0 то 19 фикр кунем, дар ин ҳолат массив бояд чунин эълон карда шавад:

Аъзоёни Team_Dim(0 то 19) Ҳамчун сатр

Дар асл, бо нобаёнӣ, рақамгузории элементҳои массив аз 0 оғоз мешавад ва дар эъломияи массив, шохиси ибтидоӣ метавонад умуман муайян карда нашавад, масалан:

Dim Team_members(19) Ҳамчун сатр

Тартибдиҳандаи VBA чунин сабтро ҳамчун эълони массиви 20 элемент бо индекси аз 0 то 19 баррасӣ мекунад.

Ҳамин қоидаҳо ҳангоми эълони массивҳои бисёрченакаи Visual Basic татбиқ мешаванд. Тавре ки аллакай дар яке аз мисолҳо нишон дода шудааст, ҳангоми эълони массиви дученака нишондиҳандаҳои андозаҳои он бо вергул ҷудо карда мешаванд:

Рақамҳои январ_фурӯши хира (1 то 31, 1 то 5) ҳамчун асъор

Аммо, агар шумо индекси ибтидоиро барои ҳарду андозаи массив муайян накунед ва онро чунин эълон кунед:

Dim Jan_Sales_Figures(31, 5) Ҳамчун асъор

он гоҳ ин сабт ҳамчун массиви дученака баррасӣ карда мешавад, ки андозаи якуми он дорои 32 элемент бо нишондиҳандаҳои аз 0 то 31 ва андозаи дуюми массив 6 элемент бо нишондиҳандаҳои аз 0 то 5 мебошад.

Массивҳои динамикӣ

Ҳама массивҳо дар мисолҳои дар боло овардашуда миқдори муайяни андоза доранд. Аммо, дар бисёр мавридҳо мо пешакӣ намедонем, ки массиви мо бояд чӣ андоза бошад. Мо метавонем бо эълон кардани як массиви азим, ки андозаи он бешубҳа аз он барои вазифаи мо зарур аст, аз вазъият берун шавем. Аммо чунин ҳалли бисёр хотираи иловагӣ талаб мекунад ва метавонад барномаро суст кунад. Як ҳалли беҳтаре вуҷуд дорад. Мо метавонем массиви динамикиро истифода барем - ин массивест, ки андозаи онро дар вақти иҷрои макрос чанд маротиба танзим ва тағир додан мумкин аст.

Массиви динамикӣ бо қавсҳои холӣ эълон карда мешавад, ба монанди:

Dim Team_Members() ҳамчун сатр

Баъдан, шумо бояд андозаи массивро ҳангоми иҷрои код бо истифода аз ифода эълон кунед ReDim:

Аъзои дастаи ReDim (1 то 20)

Ва агар ҳангоми иҷрои рамз шумо бояд андозаи массивро дубора тағир диҳед, пас шумо метавонед ифодаи ReDim-ро дубора истифода баред:

Агар Андозаи Team_Size > 20 бошад, пас ReDim Team_members (1 то Team_Size) Ба охир мерасад, агар

Дар хотир доред, ки тағир додани андозаи массиви динамикӣ бо ин роҳ боиси аз даст додани ҳамаи арзишҳои дар массив захирашуда мегардад. Барои нигоҳ доштани маълумот дар массив, шумо бояд калимаи калидиро истифода баред Нигоҳ доредчунон ки дар зер нишон дода шудааст:

Агар Андозаи Team_Size > 20 бошад, пас ReDim барои нигоҳ доштани аъзои даста_(1 то Team_Size) Ба охир мерасад, агар

Мутаассифона, калимаи калидӣ Нигоҳ доред метавонад танҳо барои тағир додани ҳудуди болоии андозаи массив истифода шавад. Сарҳади поёнии массивро бо ин роҳ тағир додан мумкин нест. Инчунин, агар массив якчанд андоза дошта бошад, пас калимаи калидиро истифода баред Нигоҳ доред, танҳо андозаи охирини массивро метавон тағир дод.

Дин ва мазҳаб