VBA - Dichiara (Dim), crea e inizializza la variabile dell'array

Questo tutorial dimostrerà come dichiarare (Dim), creare e inizializzare le variabili di array in VBA

Che cos'è una variabile di array VBA?

Una variabile array VBA può essere pensata come un gruppo di variabili, memorizzate con lo stesso nome e con lo stesso tipo di dati. Un array può memorizzare testo, numeri o oggetti.

Fai riferimento a un elemento in un array usando il suo numero di indice.

Puoi dichiarare una variabile array nello stesso modo in cui dichiareresti qualsiasi altra variabile utilizzando la parola chiave Dim, Static, Public o Private.

Array statici

Esistono 2 tipi di array: statici e dinamici. Un array statico viene dichiarato con la sua dimensione specificata quando si dichiara inizialmente l'array. Viene anche chiamato array fisso.

1 Dim intA(4) come intero

L'array sopra viene dichiarato utilizzando l'istruzione Dim a livello di procedura o modulo e la dimensione dell'array è 5 poiché non abbiamo dichiarato il valore LBound dell'array.

No, non è un errore di battitura! La dimensione dell'array è 5, nonostante si inserisca 4 nell'array. Questo perché gli indici dell'array iniziano automaticamente da zero.

Indici di array

Gli indici di array iniziano automaticamente da zero a meno che Opzione Base 1 è dichiarato nella parte superiore del modulo di codice.

Se Opzione Base 1 viene dichiarato, gli array inizieranno automaticamente da 1.

Tuttavia, trovo problematico dichiarare le variabili in questo modo. I revisori del codice potrebbero non essere a conoscenza del fatto che gli array iniziano da zero o della dichiarazione Option Base 1

Invece, preferisco dichiarare esplicitamente le posizioni di inizio e fine degli array:

1 Dim intA(2 to 5) come intero

Nota che quando lo fai, puoi iniziare l'array con qualsiasi numero (non solo 1 o 0).

Array dinamici

Una variabile Dynamic Array è un array la cui dimensione può essere modificata in fase di esecuzione. Dichiari variabili dinamiche senza una dimensione.

1 Dim intA() come intero

È possibile utilizzare l'istruzione ReDim per specificare la dimensione dell'array dopo che l'array è stato creato.

1 ReDim intA(2)

Puoi ridimensionare un array dinamico in qualsiasi momento. Tuttavia, quando si utilizza l'istruzione ReDim, tutti i valori esistenti vengono cancellati. Per preservare i valori dell'array esistenti, usa ReDim Preserve Invece.

1 ReDim Preserve intA(2)

È possibile dichiarare un array dinamico a livello di procedura, modulo o globale, ma è possibile utilizzare solo l'istruzione ReDim all'interno di una procedura.

Array di varianti

Gli array varianti sono array dinamici con cui è più facile lavorare.

1 Dim varNames()

Si noti che non è necessario specificare il tipo di dati (si presume che sia una variante) o la dimensione dell'array.

Come vedremo di seguito, puoi inizializzare gli array varianti usando la funzione Array (non è necessario ridimensionare prima gli array)!

Dichiara modulo e array pubblici

Come mostrato sopra, gli array possono essere dichiarati all'interno delle procedure, per l'uso all'interno di tale procedura:

1234 Array statico secondario()'dichiara l'array con un valore LBound di 1 e un valore UBound di 4Dim IntA(da 1 a 4) come numero interoFine sottotitolo

Ma possono anche essere dichiarati a livello di Modulo o Globale.

1234567 Opzione esplicita'dichiara l'array con un valore LBound di 1 e un valore UBound di 4Dim IntA(da 1 a 4) come numero interoArray statico secondario()Fine sottotitolo

In questo esempio, la variabile array può essere chiamata ovunque all'interno di questo modulo di codice. Invece, puoi dichiarare un array pubblico che può essere utilizzato in tutto il tuo progetto VBA (vedi la sezione successiva).

Dichiarazione di un array pubblico

Dichiari un array statico pubblico come dichiareresti una variabile pubblica.

1 strNames (3) pubblici come String

Questa dichiarazione dovrebbe andare nella parte superiore del modulo, sotto Option Explicit. Potrebbe quindi essere utilizzato in tutto il progetto VBA in qualsiasi modulo o procedura.

Se dichiari l'array nella parte superiore del modulo, ma con la parola chiave Dim, l'uso di quell'array è limitato a quel singolo modulo. Il tentativo di utilizzare l'array in un modulo separato comporterebbe un errore.

Inizializza array

È possibile assegnare valori a un array statico nel modo seguente.

1234567891011 Array statico secondario()'dichiara l'array con un valore LBound di 1 e un valore UBound di 4Dim IntA(da 1 a 4) come numero intero'inizializza l'arrayIntA(1) = 10IntA(2) = 20IntA(3) = 30IntA(4) = 40'mostra il risultato della posizione 2 dell'array nella finestra immediataDebug.Stampa IntA(2)Fine sottotitolo

Se si esegue la procedura di cui sopra, nella finestra immediata verrà visualizzato il valore 20.

Puoi anche assegnare i valori a un array dinamico allo stesso modo

12345678910111213 Sub DynamicArray()'dichiarare un array dinamico ma omettendo i valori associatiDim IntA() come intero'inizializza l'arrayReDim IntA(da 1 a 4)IntA(1) = 10IntA(2) = 20IntA(3) = 30IntA(4) = 40'mostra il risultato della posizione 2 dell'array nella finestra immediataDebug.StampaIntA(2)Fine sottotitolo

Funzione matrice

Però, solo con la variante array, è possibile utilizzare la funzione Array che potrebbe essere più semplice rispetto all'utilizzo del metodo standard.

12 'popola l'arrayintA() = Matrice(10, 20, 30, 40)

Popola array con Loop

Puoi anche popolare gli array scorrendo un intervallo di celle in Excel

1234567891011121314151617 Sub TestDynamicArrayFromExcel()'dichiarare l'arrayDim strNames() As String'dichiarare un numero intero per contare le righe in un intervalloDim n As Integer'dichiarare un intero per il cicloDim i As Integer'conta le righe in un intervallon = Intervallo ("A1", Intervallo ("A1"). Fine (xlGiù)). Righe. Conteggio'Ridim l'array alla quantità di righe nell'intervallo.ReDim strNames(n)Per i = 0 a nstrNames(i) = Range("A1").Offset(i + 1, 0)Avanti io'mostra i valori nell'arrayMsgBox Join(strNames())Fine sottotitolo

Reinizializzare gli array

Puoi reinizializzare il tuo array in qualsiasi fase del tuo codice, ma perderai il valore originale contenuto in quella posizione nel tuo array.

1234567891011121314 Array statico secondario()'dichiara l'array con un valore LBound di 1 e un valore UBound di 4Dim IntA(da 1 a 4) come numero intero'inizializza l'arrayIntA(1) = 10IntA(2) = 20IntA(3) = 30IntA(4) = 40'mostra il risultato della posizione 2 dell'array nella finestra immediataDebug.Stampa IntA(2)'inizializza di nuovo l'arrayintA(2)= 200Debug.Stampa IntA(2)Fine sottotitolo

Nell'esempio sopra, l'array statico manterrà tutti i valori, tranne il valore nella posizione 2 - quel valore cambierà in 200.

Usando ReDim

Se stai utilizzando un array dinamico, l'istruzione ReDim viene utilizzata per impostare la dimensione dell'array. È possibile utilizzare l'istruzione ReDim successivamente nel codice per modificare la dimensione dell'array tutte le volte che è necessario. La riga di codice seguente reinizializzerà l'array intA in modo che abbia una dimensione di 2 (ricorda: un indice dell'array inizia da 0!)

1 ReDim intA(1) come intero

Quindi il codice che include l'istruzione ReDim assomiglierà all'esempio seguente.

1234567891011121314151617 Sub TestDynamicArray()'dichiarare l'arrayDim intA() As IntegerReDim intA(2)'popola l'array con i numeriintA(0) = 2intA(1) = 5intA(2) = 9'mostra il numero in posizione 1Debug.Stampa intA(1)'ridime l'array per cambiare la dimensioneReDim intA(3)intA(0) = 6intA(1) = 8'mostra il numero in posizione 1 questa voltaDebug.Stampa intA(1)Fine sottotitolo

Se si esegue la procedura precedente, il valore 5 verrà visualizzato nella finestra immediata, quindi verrà visualizzato il valore 8 una volta ridimensionato l'array utilizzando ReDim e ripopolato. Tuttavia, poiché non abbiamo popolato IntA(2) e non abbiamo utilizzato Re-Dim Preserve, il valore in quella posizione nell'array verrà rimosso e entrambe le posizioni 3 e 4 nell'array saranno zero.

Utilizzo di ReDim Preserve

Se usiamo ReDim Preserve, manterrà i valori originali contenuti nell'array.

1234567891011121314151617 Sub TestDynamicArray()'dichiarare l'arrayDim intA() As IntegerReDim intA(2)'popola l'array con i numeriintA(0) = 2intA(1) = 5intA(2) = 9'mostra il numero in posizione 2Debug.Stampa intA(2)'ripristina l'arrayReDim intA(3)intA(0) = 6intA(1) = 8'mostra di nuovo il numero in posizione 2Debug.Stampa intA(2)Fine sottotitolo

In entrambe le finestre di messaggio visualizzate sopra, il numero 9 apparirà poiché l'istruzione ReDim Preserve ha mantenuto quel valore in quella posizione.

Aiuterete lo sviluppo del sito, condividere la pagina con i tuoi amici

wave wave wave wave wave