excel vba array array methods with examples
Questo tutorial spiegherà VBA Array, vari tipi di array, array variant e metodi array con l'aiuto di esempi di programmazione:
Una normale variabile VBA è un segnaposto che memorizza il valore di un singolo dato. Ha una relazione 1 a 1, ovvero 1 variabile per 1 valore.
Ora immagina di memorizzare più valori dello stesso tipo. Invece di creare più variabili, puoi semplicemente creare una variabile e memorizzare tutti gli stessi tipi di valori. Questa variabile è chiamata ARRAY.
=> Visita qui per vedere la serie di formazione VBA per tutti
come aprire un file bin su Windows 10
In questo tutorial, imparerai cosa sono gli array VBA, gli array unidimensionali e bidimensionali insieme ai diversi tipi di array come fisso e dinamico. Comprenderemo anche vari metodi di array utilizzati in VBA.
Cosa imparerai:
VBA Array
Gli array sono un tipo speciale di variabile che può memorizzare più valori dello stesso tipo di dati.
Per esempio, se hai i nomi di 100 dipendenti, invece di creare 100 variabili di tipo di dati stringa, puoi semplicemente creare una variabile di matrice di tipo stringa e assegnare 100 valori alla stessa variabile di matrice.
Un array dimensionale
Un array che ha tutti gli elementi in una singola riga o in una singola colonna è chiamato array unidimensionale. Elencare i nomi di tutti gli studenti della classe in una singola colonna è un esempio di matrice unidimensionale. È dichiarato come mostrato di seguito.
Dim arrayname (lowerbound To UpperBound) As DataType
Esistono diversi modi per dichiarare un array. Di seguito sono riportati alcuni esempi.
Esempio:
# 1) Dim MyArrayExample (da 0 a 3) As Integer
Crea un array con posizione 0,1,2,3 che accetterà valori Integer.
# 2) Dim MyArray2 (3) As String
Il valore predefinito è da 0 a 3 e crea un array con posizione 0,1,2,3 che accetterà valori String.
# 3) Dim MyArray2 (da 13 a 15) come doppio
Crea un array a partire da 13, ovvero 13, 14 e 15 e accetta valori Double. Abbiamo menzionato il limite inferiore come 13, quindi l'array inizierà ad allocare valori dalla posizione 13 anziché 0.
Creiamo un codice semplice e comprendiamo tutti e 3 i modi di dichiarazione di array.
Nota: Per scrivere codice VB aprire Microsoft Excel (le versioni supportate sono Excel 2007, 2010, 2013, 2016, 2019). Navigare verso Scheda sviluppatore -> Visual Basic (In alternativa, usa la scorciatoia Alt + F11). Nell'editor VB, fare clic su Inserisci -> Modulo e incolla il codice sottostante.
Considera la procedura seguente che mostra i diversi tipi di dichiarazioni.
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
Premi F5 o premi il pulsante Esegui sulla barra degli strumenti per eseguire il codice.
Variabile regolare vs variabile di matrice
Ora sappiamo come funziona un array unidimensionale. Quindi prendiamoci un momento per capire perché gli array sono così cruciali nei linguaggi di programmazione.
Supponi di dover inserire lo stipendio di 5 dipendenti. Per ottenere ciò utilizzando una variabile regolare, è necessario creare 5 variabili.
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
Ora costruiamo lo stesso codice utilizzando una variabile 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
Qui abbiamo usato solo una variabile array che memorizzerà tutti i nomi dei dipendenti. Supponi di dover aggiungere altri 100 nomi di dipendenti, quindi devi solo modificare la dimensione dell'array e non devi creare una nuova variabile.
Ciò ridurrà il numero di righe nel codice e quindi lo renderà facilmente comprensibile e leggibile.
Array bidimensionale
Un array bidimensionale ha 2 indici: il primo indice rappresenterà le righe e il secondo indice rappresenterà la colonna. Ha più righe e colonne e di solito è rappresentato in un formato tabella.
La dichiarazione di un array 2 dim è la seguente:
Dim ArrayName (FirstIndex To LastIndex, FirstIndex To LastIndex) As DataType.
Considera un esempio di memorizzazione dei voti di 2 studenti ottenuti in 3 materie. Quindi creeremo un array bidimensionale che richiede 2 righe e 3 colonne.
Inizieremo l'array dalla riga 1 alla riga 2 e dalla colonna 1 alla colonna 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
Premi F5 o premi il pulsante Esegui sulla barra degli strumenti per eseguire il codice.
Riga 2 e Colonna 2
Riga 1 e Colonna 3
Array fissi
Gli array fissi, chiamati anche array statici, hanno un limite inferiore e uno superiore fissi e questa dimensione non può essere modificata in fase di esecuzione. La dimensione dell'array viene specificata durante la dichiarazione tra parentesi. Tutti gli esempi precedenti sono array fissi poiché ne abbiamo menzionato la dimensione durante la dichiarazione.
Gli array fissi vengono solitamente utilizzati quando si è sicuri delle dimensioni dell'array. Per esempio, il numero di giorni in una settimana, puoi creare un array con limite inferiore 0 e limite superiore 6 e assicurati che non cambierai mai le sue dimensioni.
Array dinamici
Gli array dinamici ci consentono di ridimensionare l'array durante il tempo di esecuzione. Sono utili quando non si è sicuri della dimensione dell'array. Supponiamo che durante l'ammissione al college, potresti non essere sicuro di quanti studenti riceveranno effettivamente l'ammissione, quindi non puoi determinare la dimensione al momento della progettazione o della dichiarazione.
La dichiarazione di un array dinamico è simile a un array statico con parentesi vuote.
Dim Employee () As String
REDIM
Quando vogliamo cambiare la dimensione che dobbiamo usare REDIM , dobbiamo notare che il limite inferiore non può essere modificato, possiamo solo modificare il limite superiore dell'array.
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
Ora sappiamo che possiamo cambiare la dimensione dell'array durante il runtime, quindi possiamo usare l'istruzione ReDim ogni volta che abbiamo bisogno di aumentare l'ubound di un array. Proviamo ad aumentare ancora una volta la dimensione dell'array e ad aggiungere un nuovo nome studente.
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
Avresti osservato che il risultato non ha mostrato i nomi degli studenti aggiunti prima, dà un valore nullo. Questo perché l'istruzione Redim creerà un nuovo array con una nuova dimensione e distruggerà i vecchi valori.
ReDim Preserve
L'istruzione Representerve ci aiuta a superare la limitazione di ReDim preservando i vecchi valori e aumentando così la dimensione dell'array.
Riscriviamo il codice sopra usando 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
Poiché abbiamo utilizzato la parola chiave preservare, i valori immessi in precedenza non vengono persi e il nuovo valore viene aggiunto correttamente.
Array di varianti
Finora abbiamo visto un array che accetta lo stesso tipo di valori. Ora dichiariamo l'array come una variante e memorizziamo i vari tipi di dati come String, Date, Long, Integer in un singolo array.
Esempio:
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
Metodi array VBA
Esistono diversi metodi negli array VBA che ci aiuteranno a eseguire diverse funzioni, come indicato di seguito.
Sl. No | Nome | Sintassi | Descrizione |
---|---|---|---|
7 | Aderire | Unisci (sourcearray, (delimiter)) | Unisce più sottostringhe in un array e restituisce un valore stringa. |
uno | Vettore | Array (fraudolento) | Converte una variante normale variabile in un array. |
Due | Cancellare | Cancella arrayname | Utilizzato per reintializzare l'array di dimensioni fisse e libera la memoria per l'array dinamico. |
3 | IsArray | IsArray (nome variabile) | Determina se una variabile è un array. |
4 | Lbound | LBound (ArrayName, (Dimension)) | Restituisce il pedice più basso di un array. |
5 | Ubound | UBound (ArrayName, (Dimension)) | Restituisce il pedice più alto di un array. |
6 | Diviso | Dividi (espressione, (delimitatore, (limite, (confronta)))) | Divide una stringa in più sottostringhe e restituisce un array a base zero. |
8 | Filtro | Filtro (sourcearray, match, (include, (compare))) | Il filtro ci consentirà di cercare un file corrispondenza specificata da un array. |
Discutiamo ciascuno di essi in dettaglio con un esempio.
# 1) Array
Dichiariamo una variabile variant regolare e usiamola come un array. Quando si desidera modificare una variabile variant regolare in un array, è necessario utilizzare un file VETTORE come mostrato nell'esempio seguente.
Le funzioni array accettano un argomento che contiene valori separati da virgole. Questi valori vengono assegnati come un elemento della matrice.
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
È necessario identificare una variabile array utilizzando un indice, quindi nell'esempio precedente i valori vengono recuperati come varData (0) varData (2) varData (3).
# 2) Cancella
Questa funzione cancellerà tutti i valori inseriti per un array di dimensioni fisse e libererà lo spazio di memoria per un array dinamico.
Sintassi: cancella arrayname
La cancellazione ha un comportamento diverso per diversi tipi di dati come indicato di seguito.
- Per un numero fisso: Tutti i valori vengono azzerati.
- Per un tipo di dati stringa fissa: Tutti i valori vengono ripristinati a lunghezza zero.
- Per un array dinamico: Libera la memoria utilizzata dall'array.
Esempio:
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
Risultato prima di utilizzare la funzione Cancella
Risultato dopo aver usato Cancella
# 3) IsArray
Questa funzione viene utilizzata per determinare se la variabile di input data è un array o meno. Restituisce vero se la variabile inserita è vera, altrimenti restituisce falso.
Sintassi: IsArray (nome variabile)
Esempio:
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
Il risultato del primo Msgbox
Il risultato del secondo msgbox
# 4) Lbound
Restituisce l'indice più basso dell'array specificato come argomento per la funzione Lbound.
Sintassi: LBound (ArrayName, (Dimension))
ArrayName è il nome dell'array.
La dimensione è il valore intero facoltativo, se la matrice ha più dimensioni, è possibile specificare a quale dimensione si desidera determinare il Lbound.
Esempio:
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
Restituisce il pedice superiore dell'array specificato come argomento nella funzione Ubound.
Sintassi: UBound (ArrayName, (Dimension))
ArrayName è il nome dell'array.
La dimensione è il valore intero facoltativo, se la matrice ha più dimensioni, è possibile specificare la dimensione in cui si desidera determinare l'Ubound.
Esempio:
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) Dividi
Restituisce un array con un numero di sottostringhe derivate dall'intera stringa data.
Sintassi: Split (espressione, (delimitatore, (limite, (confronta))))
- Espressione: Questa è l'intera stringa che verrà utilizzata per produrre sottostringhe.
- Delimitatore: Utilizzando il delimitatore specificato, verranno generate sottostringhe. Se questo non viene menzionato, lo spazio viene considerato come delimitatore.
- Limite: Numero di sottostringhe da restituire.
- Confrontare: Dopo aver prodotto la sottostringa, è possibile utilizzare diverse opzioni di confronto per testare il risultato.
Esempio: Nell'esempio seguente, stiamo usando delimitatore come - e limite come 3.
Quindi la funzione split separerà l'intera stringa in sottostringa in base al delimitatore. Ma abbiamo anche menzionato il limite come 3, quindi le sottostringhe non verranno formate dopo il limite 3. Quindi l'ultimo delimitatore verrà ignorato.
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) Partecipa
Questo è solo il contrario della divisione, Join creerà una stringa combinando diverse sottostringhe.
Sintassi: Join (sourcearray, (delimiter))
Sourcearray: Matrice unidimensionale di stringhe che vuoi unire in una sola.
miglior metodo ddos per le connessioni domestiche
Delimitatore: Il delimitatore specificato verrà aggiunto dopo ogni stringa durante l'unione.
Esempio:
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
Tutti e 3 i valori sono uniti e è posto tra ogni parola, come abbiamo detto come delimitatore.
# 8) Filtro
Il filtro ci consentirà di cercare una corrispondenza specificata da un array. In base ai criteri di filtro, verrà restituito il sottoinsieme di una matrice di stringhe.
Sintassi: Filter (sourcearray, match, (include, (compare)))
Esempio:
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
Questo esempio cercherà la parola 'help' in tutta la stringa dell'array utilizzando la funzione di filtro.
Domande frequenti
Q # 1) Come ottenere la lunghezza di un array in VBA?
Risposta: Per ottenere la lunghezza di un array, utilizziamo la funzione Ubound. Questa funzione ci darà un indice superiore di un array specificato.
Q # 2) Come dichiarare un array in VBA?
Risposta: la matrice unidimensionale viene dichiarata come mostrato di seguito.
Dim arrayname (lowerbound To UpperBound) As DataType
Esempio: Dim Myarray (da 0 a 2) As Integer
Un array bidimensionale viene dichiarato come mostrato di seguito.
Dim ArrayName (FirstIndex To LastIndex, FirstIndex To LastIndex) As DataType.
Esempio: Segni oscuri (da 1 a 3, da 0 a 2) Come numero intero
Q # 3) Come convertire Range in Array?
Risposta: Possiamo usare la funzione Transpose per convertire l'intervallo in un array. Questo codice creerà Mys (10)
Sub Example() Dim Mys As Variant Mys = Application.Transpose(Range('A1:A10')) End Sub
D # 4) Che cos'è una variante di array in VBA?
Risposta: Un array variant accetterà tutti i tipi di tipi di dati per il suo indice, cioè puoi memorizzare diversi tipi di valori in un singolo array.
Esempio:
Dim arrayData (3) As Variant
arrayData (0) = 'Vikas Vipal'
arrayData (1) = 411234567890 #
Q # 5) Cos'è un'istruzione base di opzioni?
Risposta: Viene utilizzato per dichiarare il pedice inferiore di un array e viene utilizzato all'inizio di un modulo. Per impostazione predefinita, il pedice inferiore è 0 se si dichiara l'opzione Base 1 a livello di modulo, quindi per tutti gli array il pedice inferiore predefinito sarà 1.
Conclusione
In questo tutorial, abbiamo imparato come vengono utilizzati gli array in VBA e abbiamo visto come gli array sono diversi da una variabile normale. Abbiamo esplorato array unidimensionali e bidimensionali con esempi. Abbiamo anche discusso di array fissi e dinamici.
I modi per ridimensionare l'array durante il runtime e anche preservare i valori utilizzando redim keep sono stati discussi con esempi. Infine, abbiamo imparato i metodi Array che ci aiuteranno a eseguire diverse operazioni.
=> Controlla TUTTI i tutorial VBA qui
Lettura consigliata
- Esercitazione su VBA di Excel - Introduzione a VBA in Excel
- Tipi di dati VBA: tipi di dati numerici e non numerici in VBA
- Variabili VBA e opzione esplicita in VBA
- Invertire un array in Java - 3 metodi con esempi
- Tutorial sulla lunghezza di array Java con esempi di codice
- Jagged Array in Java - Tutorial con esempi
- Tipi di dati array: int Array, Double array, Array of Strings Etc.
- String Array C ++: implementazione e rappresentazione con esempi