excel vba array array methods with examples
En aquest tutorial s’explicarà el matriu VBA, diversos tipus de matriu, matriu variant i mètodes de matriu amb l’ajut d’exemples de programació:
Una variable VBA normal és un posicionador que emmagatzema el valor d'una sola informació. Té una relació d'1 a 1, és a dir, 1 variable per a 1 valor.
Ara imagineu-vos emmagatzemar diversos valors del mateix tipus. En lloc de crear diverses variables, només podeu crear una variable i emmagatzemar tots els mateixos tipus de valors. Aquesta variable s’anomena ARRAY.
=> Visiteu aquí per veure la sèrie de formació VBA per a tothom
java com fer una llista
En aquest tutorial, coneixereu què és una matriu VBA, matrius unidimensionals i bidimensionals juntament amb els diferents tipus de matrius com Fixed i Dynamic. També entendrem diversos mètodes de matriu que s’utilitzen a VBA.
Què aprendreu:
Matriu VBA
Les matrius són un tipus especial de variable que pot emmagatzemar diversos valors del mateix tipus de dades.
Per exemple, si teniu els noms de 100 empleats, en lloc de crear 100 variables de cadena de tipus de dades, només podeu crear una variable de matriu de tipus cadena i assignar 100 valors a la mateixa variable de matriu.
Matriu unidimensional
Una matriu que té tots els elements en una sola fila o en una sola columna s’anomena matriu unidimensional. Enumerar els noms de tots els estudiants de la classe en una sola columna és un exemple d’una matriu unidimensional. Es declara tal com es mostra a continuació.
Dim arrayname (lowerbound To UpperBound) com DataType
Hi ha diverses maneres de declarar una matriu. A continuació es detallen alguns exemples.
Exemple:
# 1) Dim MyArrayExample (0 a 3) com a enter
Crea una matriu amb la ubicació 0,1,2,3 que acceptarà valors enters.
# 2) Dim MyArray2 (3) Com a cadena
Per defecte de 0 a 3 i crea una matriu amb la ubicació 0,1,2,3 que acceptarà valors de cadena.
# 3) Dim MyArray2 (13 a 15) com a doble
Crea una matriu a partir de 13, és a dir, 13, 14 i 15 i accepta valors dobles. Hem esmentat el límit inferior com a 13, de manera que la matriu començarà a assignar valors des de la ubicació 13 en lloc de 0.
Creem un codi senzill i entenguem les 3 maneres de declaració de matriu.
Nota: Per escriure codi VB Obriu Microsoft Excel (les versions compatibles són Excel 2007, 2010, 2013, 2016, 2019). Aneu a Pestanya Desenvolupador -> Visual Basic (També podeu utilitzar la drecera Alt + F11). A l’editor VB, feu clic a Insereix -> Mòdul i enganxeu el codi següent.
Considereu el procediment següent que mostra els diferents tipus de declaracions.
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
Feu clic a F5 o premeu el botó d'execució de la barra d'eines per executar el codi.
Variable regular Vs variable de matriu
Ara sabem com funciona una matriu unidimensional. Prenem un moment per entendre per què les matrius són tan crucials en els llenguatges de programació.
Suposem que heu d’introduir el salari de cinc empleats. Per aconseguir-ho mitjançant una variable normal, heu de crear 5 variables.
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
Ara creem el mateix codi mitjançant una variable Array.
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
Aquí, acabem d’utilitzar una variable de matriu que emmagatzemarà tots els noms dels empleats. Suposem que heu d’afegir 100 noms d’empleats més, només heu de canviar la mida de la matriu i no cal que creeu una variable nova.
Això reduirà el nombre de línies del codi i, per tant, el farà fàcilment comprensible i llegible.
Matriu bidimensional
Una matriu bidimensional té 2 índexs: el primer índex representarà les files i el segon índex representarà la columna. Té diverses files i columnes i normalment es representa en format de taula.
La declaració d'una matriu de 2 dim és la següent:
Dim ArrayName (FirstIndex To LastIndex, FirstIndex To LastIndex) com a tipus de dades.
Penseu en un exemple d’emmagatzematge de notes de 2 estudiants obtingudes en 3 assignatures. Per tant, crearem una matriu bidimensional que prendrà 2 files i 3 columnes.
Començarem la matriu de la fila 1 a la fila 2 i de la columna 1 a la columna 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
Feu clic a F5 o premeu el botó d'execució de la barra d'eines per executar el codi.
Fila 2 i columna 2
Fila 1 i columna 3
Matrius corregits
Les matrius fixes també anomenades matèries estàtiques tenen un límit inferior i superior fix i aquesta mida no es pot canviar en temps d'execució. La mida de la matriu s’especifica durant la declaració entre parèntesis. Tots els exemples anteriors són matrius fixes, ja que hem esmentat la seva mida durant la declaració.
Normalment s’utilitzen matrius fixos quan esteu segurs de la mida de la matriu. Per exemple, el nombre de dies a la setmana, podeu crear una matriu amb el límit inferior 0 i el límit superior 6 i assegureu-vos que mai canviarà la seva mida.
Matrius dinàmics
Les matrius dinàmiques ens permeten canviar la mida de la matriu durant el temps d’execució. Són útils quan no esteu segur de la mida de la matriu. Suposem que a l’admissió a la universitat potser no esteu segur de quants estudiants obtindran l’admissió, de manera que no podeu determinar la mida en el moment del disseny o de la declaració.
La declaració d'una matriu dinàmica és similar a una matriu estàtica amb parèntesis buits.
Disminueix l’empleat () com a cadena
REDIM
Quan volem canviar la mida que hem d’utilitzar REDIM , hem de tenir en compte que el límit inferior no es pot canviar, només podem canviar el límit superior de la matriu.
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
Ara sabem que podem canviar la mida de la matriu durant el temps d’execució, de manera que podem utilitzar la sentència ReDim sempre que necessitem augmentar la sortida d’un array. Intentem augmentar la mida de la matriu una vegada més i afegim un nom d'estudiant nou.
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
Hauríeu observat que el resultat no mostrava els noms dels estudiants afegits abans, dóna un valor nul. Això es deu al fet que la sentència Redim crearà una nova matriu amb una nova mida i destruirà els valors antics.
ReDim Preserve
La declaració Represerve ens ajuda a superar la limitació de ReDim conservant els valors antics i augmentant així la mida de la matriu.
Reescrivim el codi anterior amb 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
Com que hem utilitzat la paraula clau de conservació, els valors introduïts anteriorment no es perden i el valor nou s’afegeix amb èxit.
Matriu de variants
Fins ara hem vist una matriu que accepta el mateix tipus de valors. Ara declarem la matriu com una variant i emmagatzemem els diferents tipus de dades com ara Cadena, Data, Llarg, Enter en una única matriu.
Exemple:
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
Mètodes de matriu VBA
Hi ha diversos mètodes a les matrius VBA que ens ajudaran a realitzar diferents funcions, tal com s’esmenta a continuació.
Sl. No | Nom | Sintaxi | Descripció |
---|---|---|---|
7 | Uneix-te | Unir-se (font original, (delimitador)) | Uneix diverses subcadenes en una matriu i retorna un valor de cadena. |
1 | Matriu | Matriu (fraudulenta) | Converteix una variant normal variable en una matriu. |
2 | Esborra | Esborra el nom de matriu | S'utilitza per reinicialitzar la matriu de mida fixa i allibera la memòria de la matriu dinàmica. |
3 | IsArray | IsArray (nom de variable) | Determina si una variable és una matriu. |
4 | Lligat | LBound (ArrayName, (dimensió)) | Retorna el subíndex més baix d'una matriu. |
5 | Ubound | UBound (ArrayName, (dimensió)) | Retorna el subíndex més alt d'una matriu. |
6 | Dividit | Dividir (expressió, (delimitador, (límit, (comparar)))) | Divideix una cadena en diverses subcadenes i retorna una matriu basada en zero. |
8 | Filtre | Filtre (font original, coincidència, (incloure, (comparar))) | El filtre ens permetrà cercar a concordança especificada des d'una matriu. |
Analitzem cadascun d’ells amb detall amb un exemple.
# 1) Matriu
Declarem una variable variant normal i l’utilitzem com a matriu. Quan vulgueu canviar una variable variant normal en una matriu, hem d'utilitzar un fitxer ARRAY com es mostra a l'exemple següent.
Les funcions de matriu accepten un argument que conté valors separats per comes. Aquests valors s’assignen com a element de la matriu.
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
Heu d’identificar una variable de matriu mitjançant un índex, de manera que, a l’exemple anterior, els valors es recuperen com a varData (0) varData (2) varData (3).
# 2) Esborra
Aquesta funció esborrarà tots els valors introduïts per a una matriu de mida fixa i alliberarà l’espai de memòria d’una matriu dinàmica.
Sintaxi: esborra el nom de matriu
L'esborrat té un comportament diferent per als diferents tipus de dades, tal com es mostra a continuació.
- Per a un número numèric fix: Tots els valors es restableixen a zero.
- Per a un tipus de dades de cadena fixa: Tots els valors es restableixen a zero.
- Per a una matriu dinàmica: Allibera la memòria utilitzada per la matriu.
Exemple:
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
Resultat abans d’utilitzar la funció Esborra
Resultat després d'utilitzar Esborra
# 3) IsArray
Aquesta funció s'utilitza per determinar si la variable d'entrada donada és una matriu o no. Retorna true si la variable introduïda és true, en cas contrari, torna false.
Sintaxi: IsArray (nom de variable)
Exemple:
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
El resultat del primer Msgbox
El resultat de la segona msgbox
# 4) Lbound
Retorna el subíndex més baix de la matriu especificada com a argument per a la funció Lbound.
Sintaxi: LBound (ArrayName, (dimensió))
ArrayName és el nom de la matriu.
La dimensió és el valor enter opcional, si la matriu té diverses dimensions, podeu especificar a quina dimensió voleu determinar el Lbound.
Exemple:
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
Retorna el subíndex superior de la matriu especificada com a argument a la funció Ubound.
Sintaxi: UBound (ArrayName, (Dimensió))
ArrayName és el nom de la matriu.
La dimensió és el valor enter opcional, si la matriu té diverses dimensions, podeu especificar quina dimensió voleu determinar l'Ubound.
Exemple:
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) Dividir
Retorna una matriu amb un nombre de subcadenes derivades de la cadena sencera donada.
Sintaxi: Dividir (expressió, (delimitador, (límit, (comparar))))
- Expressió: Aquesta és tota la cadena que s’utilitzarà per produir subcadenes.
- Delimitador: Mitjançant el delimitador especificat, es generaran subcadenes. Si no s'esmenta això, es considera l'espai com a delimitador.
- Límit: Nombre de subcadenes a retornar.
- Compareu: Després de produir la subcadena, podeu utilitzar diferents opcions de comparació per provar el resultat.
Exemple: A l'exemple següent, fem servir el delimitador com a - i el límit com a 3.
Per tant, la funció de divisió separarà tota la cadena en subcadena segons el delimitador. Però també hem esmentat el límit com a 3, de manera que les cadenes no es formaran després del límit 3. Per tant, l'últim delimitador - s'ometrà.
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) Uneix-te
Això és només el revers de la divisió; Join crearà una cadena combinant diverses subcadenes.
exemple de cas de prova junit a Java
Sintaxi: Unir-se (font original, (delimitador))
Sourcearray: Matriu unidimensional de cadenes que voleu unir en una.
Delimitador: El delimitador especificat s’afegirà després de cada cadena mentre s’uneix.
Exemple:
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
Tots els 3 valors estan units i es col·loca entre cada paraula, tal com hem esmentat com a delimitador.
# 8) Filtre
El filtre ens permetrà cercar una concordança especificada des d’una matriu. Segons els criteris de filtre, es retornarà el subconjunt d'una matriu de cadenes.
Sintaxi: filtre (font original, coincidència, (incloure, (comparar)))
Exemple:
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
En aquest exemple es cercarà la paraula 'ajuda' a tota la cadena de matriu mitjançant la funció de filtre.
Preguntes freqüents
P # 1) Com obtenir la longitud d'una matriu a VBA?
Resposta: Per obtenir la longitud d’una matriu, fem servir la funció Ubound. Aquesta funció ens proporcionarà un índex superior d’una matriu especificada.
Q # 2) Com declarar una matriu a VBA?
Resposta: La matriu unidimensional es declara tal com es mostra a continuació.
Dim arrayname (lowerbound To UpperBound) com DataType
Exemple: Dim Myarray (0 a 2) com a enter
Es declara una matriu bidimensional com es mostra a continuació.
Dim ArrayName (FirstIndex To LastIndex, FirstIndex To LastIndex) com a tipus de dades.
Exemple: Marques atenuades (1 a 3, 0 a 2) com a enter
P # 3) Com convertir Range a Array?
Resposta: Podem utilitzar la funció Transpose per convertir el rang a una matriu. Aquest codi crearà Mys (10)
Sub Example() Dim Mys As Variant Mys = Application.Transpose(Range('A1:A10')) End Sub
Q # 4) Què és una variant de matriu a VBA?
Resposta: Una variant de matriu acceptarà tot tipus de tipus de dades per al seu índex, és a dir, podeu emmagatzemar diferents tipus de valors en una sola matriu.
Exemple:
Dim arrayData (3) Com a variant
arrayData (0) = 'Vikas Vipal'
arrayData (1) = 411234567890 #
P # 5) Què és una sentència base d'opcions?
Resposta: S'utilitza per declarar el subíndex inferior d'una matriu i s'utilitza a l'inici d'un mòdul. Per defecte, el subíndex inferior és 0 si declareu l’Opció Base 1 a nivell de mòdul, llavors per a totes les matrius el subíndex inferior per defecte serà 1.
Conclusió
En aquest tutorial, hem après com s’utilitzen els array a VBA i hem vist com els array són diferents d’una variable normal. Hem explorat matrius unidimensionals i bidimensionals amb exemples. També vam discutir matrius fixos i dinàmics.
Es van discutir amb exemples les maneres de canviar la mida de la matriu durant el temps d'execució i preservar els valors mitjançant redim preservar. Finalment, vam aprendre mètodes de matriu que ens ajudaran a realitzar diverses operacions.
=> Consulteu TOTS els tutorials de VBA aquí
Lectura recomanada
- Tutorial VBA d'Excel: Introducció a VBA a Excel
- Tipus de dades VBA: tipus de dades numèriques i no numèriques a VBA
- Variables VBA i opció explícites a VBA
- Inverteix una matriu a Java: 3 mètodes amb exemples
- Tutorial de longitud de matriu de Java amb exemples de codi
- Matriu irregular a Java: tutorial amb exemples
- Tipus de dades de matriu: matriu int, matriu doble, matriu de cadenes, etc.
- String Array C ++: implementació i representació amb exemples