Бұл оқулық бағдарламалау мысалдарының көмегімен VBA массивін, әртүрлі массив түрлерін, нұсқа массивін және массив әдістерін түсіндіреді:
Кәдімгі VBA айнымалысы - бұл деректерді сақтайтын орын ұстаушы. бір деректердің мәні. Оның 1-ден 1-ге дейінгі қатынасы бар, яғни 1 мән үшін 1 айнымалы.
Енді бір түрдегі бірнеше мәндерді сақтауды елестетіңіз. Бірнеше айнымалы мәндерді жасаудың орнына бір айнымалы мәнді жасауға және мәндердің барлық бірдей түрлерін сақтауға болады. Бұл айнымалы ARRAY деп аталады.
Осы оқулықта, Сіз VBA массивінің, бір өлшемді және екі өлшемді массивтердің не екенін және Fixed және Dynamic сияқты массивтердің әртүрлі түрлерімен танысасыз. Біз сондай-ақ VBA жүйесінде қолданылатын әртүрлі массив әдістерін түсінеміз.
VBA массиві
Массивтер - бірдей деректер түрінің бірнеше мәндерін сақтай алатын айнымалының ерекше түрі. .
Мысалы, егер сізде 100 қызметкердің аты болса, онда деректер түрінің жолының 100 айнымалысын жасаудың орнына, жол түріндегі бір массив айнымалысын жасап, 100 мән тағайындауға болады. бірдей массив айнымалысына.
Бір өлшемді массив
Бір жолда немесе бір бағанда барлық элементтері бар массив Бірөлшемді массив деп аталады. Сыныптағы барлық оқушылардың аты-жөнін бір бағанда көрсету бір өлшемді массивтің мысалы болып табылады. Ол көрсетілгендей жарияланадымассив төменде көрсетілгендей жарияланады.
Массив атауы(БіріншіИндекс- LastIndex, FirstIndex- LastIndex) ДеректерТипі ретінде.
Мысалы: Қараңғылық белгілері(1-ден 3-ке дейін). , 0-ден 2) Бүтін сан ретінде
Q #3) Диапазонды массивке қалай түрлендіруге болады?
Жауап: Транспозиция функциясын пайдалана аламыз. ауқымды массивке түрлендіру үшін. Бұл код Mys[10]
Sub Example() Dim Mys As Variant Mys = Application.Transpose(Range("A1:A10")) End Sub
Q #4 жасайды) VBA-дағы массив нұсқасы дегеніміз не?
Жауап: Нұсқалық массив өз индексі үшін деректер түрлерінің барлық түрлерін қабылдайды, яғни мәндердің әртүрлі түрлерін бір массивте сақтауға болады.
Мысалы:
Dim arrayData(3) Variant ретінде
arrayData(0) = “Vikas Vipal”
arrayData(1) = 411234567890#
Массивтің өлшемін өзгерту жолдары орындалу уақыты, сондай-ақ redim сақтау арқылы мәндерді сақтау мысалдармен талқыланды. Соңында біз бірнеше операцияларды орындауға көмектесетін Array әдістерін үйрендік.
төменде.Dim массив атауы(төменгі шегінен жоғарғы шегіне) Деректер түрі ретінде
Массивді жариялаудың бірнеше жолы бар. Төменде бірнеше мысал келтірілген.
Мысалы:
#1) Dim MyArrayExample(0-ден 3-ке дейін) бүтін сан ретінде
Бүтін мәндерді қабылдайтын 0,1,2,3 орны бар массив жасайды.
#2) Dim MyArray2(3) Жол ретінде
Әдепкі мәндері 0 3-ке дейін және Жол мәндерін қабылдайтын 0,1,2,3 орны бар массив жасайды.
#3) Dim MyArray2(13-15) Қосарлы
13, яғни 13, 14 және 15-тен басталатын массив жасайды және Double мәндерін қабылдайды. Біз төменгі шекараны 13 деп атап өттік, сондықтан массив мәндерді 0 емес, 13-орналасқан жерден бөле бастайды.
Қарапайым код жасап, массив жариялаудың барлық 3 әдісін түсінейік.
Ескертпе: VB кодын жазу үшін Microsoft Excel бағдарламасын ашыңыз (қолдау көрсетілетін нұсқалар Excel 2007, 2010, 2013, 2016, 2019). Әзірлеуші қойындысына өтіңіз -> Visual Basic (Баламалы түрде Alt+F11 пернелер тіркесімін пайдаланыңыз). VB редакторында Кірістіру -> Модуль және төмендегі кодты қойыңыз.
Мәлімдемелердің әртүрлі түрлерін көрсететін төмендегі процедураны қарастырыңыз.
Private Sub arrayExample1() Dim firstQuarter(0 To 2) As String ‘creates array with index 0,1,2 firstQuarter(0) = "Jan" firstQuarter(1) = "Feb" firstQuarter(2) = "Mar" MsgBox "First Quarter in calendar " & " " & firstQuarter(0) & " " & firstQuarter(1) & " " & firstQuarter(2) End Sub Private Sub arrayExample2() Dim secondQuarter(2) As String ‘creates array with index 0,1,2 secondQuarter(0) = "April" secondQuarter(1) = "May" secondQuarter(2) = "June" MsgBox "Second Quarter in calendar " & " " & secondQuarter(0) & " " & secondQuarter(1) & " " & secondQuarter(2) End Sub Private Sub arrayExample3() Dim thirdQuarter(13 To 15) As String ‘creates array with index 13,14,15 thirdQuarter(13) = "July" thirdQuarter(14) = "Aug" thirdQuarter(15) = "Sep" MsgBox "Third Quarter in calendar " & " " & thirdQuarter(13) & " " & thirdQuarter(14) & " " & thirdQuarter(15) End Sub
F5 пернесін басыңыз немесе құралдар тақтасындағы іске қосу түймесін басыңыз. кодты орындау үшін.
Тұрақты айнымалы Vs массив айнымалы
Біз енді бір өлшемді массив қалай жұмыс істейтінін білеміз. Сонымен, массивтердің неліктен соншалықты маңызды екенін түсінуге бір сәт уақыт бөлейікпрограммалау тілдері.
5 қызметкердің жалақысын енгізу керек деп есептейік. Бұған тұрақты айнымалыны қолдану арқылы қол жеткізу үшін 5 айнымалы жасау керек.
Public Sub RegularVariable() Dim shet As Worksheet Set shet = ThisWorkbook.Worksheets("Sheet1") ' Declare variable for each student Dim Emp1 As String Dim Emp2 As String Dim Emp3 As String Dim Emp4 As String Dim Emp5 As String ' Read student marks from cell Emp1 = shet.Range("A" & 2).Value Emp2 = shet.Range("A" & 3).Value Emp3 = shet.Range("A" & 4).Value Emp4 = shet.Range("A" & 5).Value Emp5 = shet.Range("A" & 6).Value ' Print student marks Debug.Print "Emp Name" Debug.Print Emp1 Debug.Print Emp2 Debug.Print Emp3 Debug.Print Emp4 Debug.Print Emp5 End Sub
Енді массив айнымалысы арқылы бірдей кодты құрастырайық.
Option Explicit Public Sub ArrayVarible() Dim shet As Worksheet Set shet = ThisWorkbook.Worksheets("Sheet1") Dim Employee(1 To 6) As String Dim i As Integer For i = 1 To 6 Employee(i) = shet.Range("A" & i).Value Debug.Print Employee(i) Next i End Sub
Мұнда, біз барлық қызметкер атын сақтайтын бір массив айнымалысын қолдандық. Сізге тағы 100 қызметкер атын қосу керек делік, содан кейін массив өлшемін өзгерту керек және жаңа айнымалы жасаудың қажеті жоқ.
Бұл кодтағы жолдардың санын азайтады және осылайша оны оңай жасайды. түсінікті және оқылатын.
Екі өлшемді массив
2 өлшемді массивтің 2 индексі бар – бірінші индекс жолдарды, ал 2-ші индекс бағанды көрсетеді. Оның бірнеше жолдары мен бағандары бар және әдетте кесте пішімінде көрсетіледі.
2 күңгірт массивтің мәлімдемесі келесідей:
Dim ArrayName(FirstIndex LastIndex, FirstIndex To LastIndex) Деректер түрі ретінде.
3 пән бойынша алған 2 оқушының бағаларын сақтау мысалын қарастырыңыз. Сонымен, біз 2 жол және 3 баған болатын 2 өлшемді массив жасаймыз.
Массивті 1-жолдан 2-жолға және 1-бағаннан 3-бағанға дейін бастаймыз.
Sub Twodim() Dim totalMarks(1 To 2, 1 To 3) As Integer totalMarks(1, 1) = 23 totalMarks(2, 1) = 34 totalMarks(1, 2) = 33 totalMarks(2, 2) = 55 totalMarks(1, 3) = 45 totalMarks(2, 3) = 44 Msgbox “Total Marks in Row 2 and column 2 is “ &totalMarks(2,2) Msgbox “Total Marks in Row 1 and column 3 is “ &totalMarks(1,3) End Sub
F5 пернесін басыңыз. немесе Кодты орындау үшін құралдар тақтасындағы іске қосу түймесін басыңыз.
2-жол және 2-баған
1-жол және 3-баған
Тұрақты массивтер
Тұрақты массивтер Статикалық деп те аталадыМассивтердің бекітілген төменгі және жоғарғы шегі бар және бұл өлшемді орындау уақытында өзгерту мүмкін емес. Массивтің өлшемі жақшаның ішінде мәлімдеме кезінде көрсетіледі. Жоғарыда келтірілген мысалдардың барлығы бекітілген массивтер болып табылады, өйткені біз оның өлшемін декларация кезінде айтқанбыз.
Тіркелген массивтер әдетте массив өлшеміне сенімді болған кезде пайдаланылады. Мысалы, аптадағы күндер саны, сіз төменгі шегі 0 және жоғарғы шекарасы 6 болатын массив жасай аласыз және оның өлшемін ешқашан өзгертпейтініңізге сенімді боласыз.
Динамикалық массивтер
Динамикалық массивтер орындалу уақытында массив өлшемін өзгертуге мүмкіндік береді. Бұл массив өлшеміне сенімді болмасаңыз пайдалы. Колледжге қабылдау кезінде сіз қанша студент қабылданатынын білмеуіңіз мүмкін делік, сондықтан дизайн немесе декларация уақытында өлшемді анықтай алмайсыз.
Динамикалық массивтің мәлімдемесі статикалық массивке ұқсас. бос жақшалары бар массив.
Dim Employee() Жол ретінде
REDIM
Өлшемді өзгерткіміз келгенде, пайдалануымыз керек. REDIM , біз төменгі шекті өзгертуге болмайтынын ескеруіміз керек, біз тек массивтің жоғарғы шекарасын ғана өзгерте аламыз.
Sub dynamicArray() Dim dynArray() As String Dim curdate As Date curdate = Now ReDim dynArray(2) ‘ Redim will help to change the array size during runtime dynArray(0) = "John" dynArray(1) = "Tom" dynArray(2) = "Tonny" MsgBox "Students Enrolled after " & curdate & " are “ & dynArray(0) & ", " & dynArray(1) & ", " & dynArray(2) End Sub
Енді біз білеміз. орындалу уақыты кезінде массив өлшемін өзгертеді, сондықтан біз ReDim операторын массивтің қосымша көлемін ұлғайту қажет болғанда пайдалана аламыз. Жиым өлшемін тағы бір рет үлкейтіп, жаңасын қосып көрейікстуденттің аты.
Sub RedimExample() Dim dynArray() As String Dim curdate As Date curdate = Now Dim size As Integer ReDim dynArray(2) dynArray(0) = "John" dynArray(1) = "Tom" dynArray(2) = "Tonny" MsgBox "Students Enrolled untill " & curdate & " are " & dynArray(0) & ", " & dynArray(1) & ", " & dynArray(2) ReDim dynArray(3) ‘ Redim will reinitialise the array and destroy the old values dynArray(3) = "John" MsgBox "Students Enrolled untill " & curdate & " are " & dynArray(0) & ", " & dynArray(1) & ", " & dynArray(2) & " , " & dynArray(3) End Sub
Нәтижеде бұрын қосылған студенттердің аты көрсетілмегенін байқаған боларсыз, ол нөлдік мән береді. Себебі Redim операторы жаңа өлшемді жаңа массив жасайды және ескі мәндерді жояды.
ReDim Preserve
Represerve операторы ескі мәндерді сақтау арқылы ReDim шектеуін жеңуге көмектеседі. және сол арқылы массив өлшемін ұлғайту.
Жоғарыдағы кодты ReDim Preserve көмегімен қайта жазайық.
Sub preserveExample() Dim dynArray() As String Dim curdate As Date curdate = Now Dim size As Integer ReDim dynArray(2) dynArray(0) = "John" dynArray(1) = "Tom" dynArray(2) = "Tonny" MsgBox "Students Enrolled untill " & curdate & " are " & dynArray(0) & ", " & dynArray(1) & ", " & dynArray(2) ReDim preserve dynArray(3) ‘ Redim preserve will retain the old values dynArray(3) = "John" MsgBox "Students Enrolled untill " & curdate & " are " & dynArray(0) & ", " & dynArray(1) & ", " & dynArray(2) & " , " & dynArray(3) End Sub
Біз пайдаланғандай сақтау кілт сөзінде бұрын енгізілген мәндер жоғалмайды және жаңа мән сәтті қосылды.
Вариант массиві
Осы уақытқа дейін біз мәндердің бір түрін қабылдайтын массивді көрдік. Енді массивті нұсқа ретінде жариялап, String, Date, Long, Integer сияқты деректердің әртүрлі түрлерін бір массивте сақтайық.
Мысалы:
Sub arrayVariant() Dim arrayData(3) As Variant arrayData(0) = "Vikram Vikrant" arrayData(1) = 411234567890# arrayData(2) = 38 arrayData(3) = "06-09-1972" MsgBox "Details of person " & arrayData(0) & " is " & " Phone No " & arrayData(1) & " ,Id " & arrayData(2) & " ,DOB " & arrayData(3) End Sub
VBA массивінің әдістері
VBA массивтерінде төменде көрсетілгендей әртүрлі функцияларды орындауға көмектесетін бірнеше әдістер бар.
Sl. No | Аты | Синтаксис | Сипаттамасы |
---|---|---|---|
1 | Массив | Массив(arglist) | Тұрақты нұсқаны айнымалыны массивке түрлендіреді. |
2 | Өшіру | Жиым атын өшіру | Белгіленген өлшем массивін қайта инициализациялау үшін пайдаланылады және динамикалық үшін жадты босатадымассив. |
3 | IsArray | IsArray (айнымалы атауы) | айнымалы – массив. |
4 | Lbound | LBound( МассивАты, [Өлшем] ) | Массивтің ең төменгі жазылуын қайтарады. |
5 | Ubound | UBound( ArrayName , [Өлшем] ) | Массивтің ең жоғарғы жазылуын қайтарады. |
6 | Бөлу | Бөлу(өрнек, [ бөлгіш, [ шектеу, [ салыстыру ]]]) | Ол жолды бірнеше ішкі жолдарға бөледі және нөлге негізделген массивді қайтарады. |
7 | Join | Join(sourcearray, [ delimiter ]) | Массивдегі бірнеше ішкі жолдарды біріктіреді және жол мәнін қайтарады . |
8 | Сүзгі | Сүзгі(бастапқы массив, сәйкестік, [ қосу, [ салыстырыңыз ]]) | Сүзгі бізге белгіленген сәйкестікті массивтен іздеуге мүмкіндік береді. |
Олардың әрқайсысын мысалмен егжей-тегжейлі талқылайық.
#1) Массив
Қарапайым нұсқа айнымалысын жариялап, оны массив ретінде қолданайық. Тұрақты нұсқаның айнымалы мәнін массивке өзгерткіңіз келсе, төмендегі мысалда көрсетілгендей ARRAY функциясын пайдалануымыз керек.
Массив функциялары үтірмен бөлінген мәндерден тұратын аргументті қабылдайды. . Бұл мәндер массив элементі ретінде тағайындалады.
Sub variantArray() Dim varData As Variant varData = Array("Mon Bel", "+61 112334123", 567, "06-09-1972") MsgBox "Details of person " & varData(0) & " is " & " Phone No " & varData(1) & " ,Id " & varData(2) & " ,DOB " & varData(3) End Sub
Сіз индексті пайдаланып массив айнымалысын анықтауыңыз керек,демек, жоғарыда келтірілген мысалда мәндер varData(0) varData(2) varData(3) ретінде шығарылады.
#2) Өшіру
Бұл функция файл үшін енгізілген барлық мәндерді жояды. бекітілген өлшемді массив және динамикалық массив үшін жад кеңістігін босатады.
Синтаксис: Жиым атын өшіру
Өшіру берілгендей әр түрлі деректер түрлері үшін әр түрлі әрекетке ие. төменде.
- Тіркелген сан үшін: Барлық мәндер нөлге қалпына келтіріледі.
- Белгілі бір жол деректер түрі үшін: Барлық мәндер нөлдік ұзындыққа қалпына келтіріледі.
- Динамикалық массив үшін: Массив пайдаланатын жадты босатады.
Мысал :
Sub eraseExample() Dim NumArray(3) As Integer Dim decArray(2) As Double Dim strArray(2) As String NumArray(0) = 12345 decArray(1) = 34.5 strArray(1) = "Erase Function" Dim DynaArray() ReDim DynaArray(3) MsgBox " Values before Erase " & (NumArray(0)) & "," & (decArray(1)) & " , " & (strArray(1)) Erase NumArray Erase decArray Erase strArray Erase DynaArray ' Free the memory ' All values are erased. MsgBox " Values after Erase " & NumArray(0) & "," & decArray(1) & " , " & strArray(1) End Sub
Өшіру функциясын пайдаланғанға дейінгі нәтиже
Өшіруді пайдаланғаннан кейінгі нәтиже
#3) IsArray
Бұл функция берілген кіріс айнымалысының массив екенін немесе емес екенін анықтау үшін қолданылады. Енгізілген айнымалы шын болса, ақиқат мәнін қайтарады, әйтпесе ол жалған мәнін қайтарады.
Синтаксис : IsArray (айнымалы атауы)
Мысалы:
Sub isArrayTest() Dim arr1, arr2 As Variant arr1 = Array("Jan", "Feb", "Mar") arr2 = "12345" MsgBox ("Is arr1 an Array : " & IsArray(arr1)) MsgBox ("Is arr2 an Array : " & IsArray(arr2)) End
Бірінші Msgbox нәтижесі
Екінші msgbox нәтижесі
#4) Lbound
Ол Lbound функциясының аргументі ретінде көрсетілген массивтің ең төменгі жазылуын қайтарады.
Синтаксис: LBound( ArrayName, [Өлшем] )
МассивАты - массивтің аты.
Өлшем - қосымша бүтін мән, егер массивте бірнеше өлшем болса, онда келесіні көрсетуге боладыLbound мәнін анықтағыңыз келетін өлшем.
Мысалы:
Sub lboundTest() Dim Result1, Result2, Result3 Dim ArrayValue(1 To 10, 5 To 15, 10 To 20) ' Declare array variables. Dim Arraywithoutlbound(10) Result1 = LBound(ArrayValue, 1) ' Returns 1. Result2 = LBound(ArrayValue, 3) ' Returns 10. Result3 = LBound(Arraywithoutlbound) MsgBox "Lowest subscript in first array " & Result1 & " lowest subscript in 3rd array " & Result2 & " Lowest subscript in Arraywithoutlbound " & Result3 End Sub
№5) Ubound
Ол Ubound функциясында аргумент ретінде көрсетілген массивтің жоғарғы таңбасын қайтарады.
Синтаксис: UBound( ArrayName, [Dimension] )
МассивАты - жиым.
Өлшем - қосымша бүтін сан, егер массивте бірнеше өлшем болса, онда сіз Ubound анықтағыңыз келетін өлшемді көрсете аласыз.
Мысалы:
Sub UboundTest() Dim Result1, Result2, Result3 Dim ArrayValue(1 To 10, 5 To 15, 10 To 20) ' Declare array variables. Dim ArraywithoutUbound(10) Result1 = UBound(ArrayValue, 1) Result2 = UBound(ArrayValue, 3) Result3 = UBound(ArraywithoutUbound) MsgBox "Lowest subscript in first array " & Result1 & " lowest subscript in 3rd array " & Result2 & " Lowest subscript in Arraywithoutlbound " & Result3 End Sub
#6) Бөлу
Ол берілген тұтас жолдан алынған ішкі жолдар саны бар массивді қайтарады.
Синтаксис: Бөлу(өрнек, [ бөлгіш, [ шектеу, [ салыстыру ]]])
- Өрнек: Бұл бүкіл жол ішкі жолдарды жасаңыз.
- Бөлгіш: Көрсетілген бөлгішті пайдалану арқылы ішкі жолдар жасалады. Егер бұл айтылмаса, бос орын бөлгіш ретінде қарастырылады.
- Шектеу: Қайтарылатын ішкі жолдар саны.
- Салыстыру: ішкі жол жасалса, нәтижені тексеру үшін әртүрлі салыстыру опцияларын пайдалануға болады.
Мысалы: Төмендегі мысалда бөлгішті – және шектеуді 3 ретінде қолданамыз.
Сондықтан бөлу функциясы бөлгішке негізделген бүкіл жолды ішкі жолға бөледі. Бірақ біз сонымен қатар шектеуді 3 деп атап өттік, сондықтан ішкі жолдар 3 шегінен кейін құрылмайды. Осылайша, соңғы бөлгіш –өткізіп жіберіледі.
Sub splitExample() Dim MyString As String Dim Result() As String Dim DisplayText As String MyString = "This is the example for-VBA-Split-Function" Result = Split(MyString, "-",3) MsgBox Result(0) & vbNewLine & Result(1) & vbNewLine & Result(2) & vbNewLine & Result(3) End Sub
№7) Қосылу
Бұл бөлудің кері жағы ғана, Join бірнеше ішкі жолдарды біріктіру арқылы бір жолды жасайды.
Синтаксис: Біріктіру(бастапқы массив, [ бөлгіш ])
Дереккөз массиві: Бірге қосқыңыз келетін жолдардың бір өлшемді массиві.
Бөлгіш: Көрсетілген бөлгіш қосылу кезінде әрбір жолдан кейін қосылады.
Мысалы:
Sub joinExample() Dim Result As String Dim dirarray(0 To 2) As String dirarray(0) = "D:" dirarray(1) = "SoftwareTestingHelp" dirarray(2) = "Arrays" Result = Join(dirarray, "\") MsgBox "Date after joining " & Result End Sub
Барлық 3 мән біріктірілген және \ әр сөздің арасына қойылады, біз \ бөлгіш ретінде атап өткенбіз.
#8) Сүзгі
Сүзгі бізге мүмкіндік береді массивтен көрсетілген сәйкестікті іздеу. Сүзгі критерийлеріне негізделген жол жиымының ішкі жиыны қайтарылады.
Синтаксис: Сүзгі(бастапқы массив, сәйкестік, [ қосу, [ салыстыру ]])
Мысалы:
Sub filterExample() Dim Mystring As Variant Mystring = Array("Software Testing", "Testing help", "Software help") filterString = Filter(Mystring, "help") MsgBox "Found " & UBound(Mystring) - LBound(Mystring) + 1 & " words matching the criteria " End Sub
Бұл мысал сүзгі функциясын пайдаланып барлық массив жолында "анықтама" сөзін іздейді.
Жиі қойылатын сұрақтар
1-сұрақ) VBA-да массивтің ұзындығын қалай алуға болады?
Жауап: Бір элементтің ұзындығын алу үшін массивінде біз Ubound функциясын қолданамыз. Бұл функция бізге көрсетілген массивтің жоғарғы жазылуын береді.
2-сұрақ) VBA-да массив қалай жарияланады?
Жауап: Бір- өлшемді жиым төменде көрсетілгендей жарияланады.
Диск жиым атауы (төменгі шегінен жоғарғы шегіне дейін) DataType ретінде
Мысалы: Dim Myarray(0 - 2) бүтін сан ретінде
Екі өлшемді