Matrici in Visual Basic per applicazioni

Le matrici in Visual Basic for Application sono strutture che in genere archiviano insiemi di variabili correlate dello stesso tipo. Le voci dell'array sono accessibili dal loro indice numerico.

Ad esempio, esiste un team di 20 persone i cui nomi devono essere salvati per un uso successivo nel codice VBA. Si potrebbe semplicemente dichiarare 20 variabili per contenere ogni nome, in questo modo:

Dim Team_Member1 come stringa Dim Team_Member2 come stringa ... Dim Team_Member20 come stringa

Ma puoi usare un modo molto più semplice e organizzato: archivia un elenco di nomi dei membri del team in una matrice di 20 variabili come Corda:

Dim Team_Members (da 1 a 20) come stringa

Nella riga mostrata sopra, abbiamo dichiarato un array. Ora scriviamo un valore a ciascuno dei suoi elementi, in questo modo:

Team_Members(1) = "John Smith"

Un ulteriore vantaggio della memorizzazione dei dati in un array, rispetto all'utilizzo di variabili separate, diventa evidente quando diventa necessario eseguire la stessa azione su ciascun elemento dell'array. Se i nomi dei membri del team fossero memorizzati in 20 variabili separate, sarebbero necessarie 20 righe di codice da scrivere ogni volta per eseguire la stessa azione su ciascuna di esse. Tuttavia, se i nomi sono archiviati in un array, è possibile eseguire l'azione desiderata con ciascuno di essi utilizzando un semplice ciclo.

Il funzionamento è illustrato di seguito con un esempio di codice che stampa i nomi di ciascun membro del team in sequenza nelle celle delle colonne. A foglio di lavoro Excel attivo.

For i = 1 To 20 Cells(i,1).Value = Team_Members(i) Next i

Ovviamente, lavorare con un array che memorizza 20 nomi è molto meno ingombrante e più accurato rispetto all'utilizzo di 20 variabili separate. Ma cosa succede se questi nomi non sono 20, ma 1000? E se, inoltre, è necessario tenere separati cognomi e patronimici?! È chiaro che presto diventerà completamente impossibile gestire un tale volume di dati nel codice VBA senza l'aiuto di un array.

Matrici multidimensionali in Excel Visual Basic

Le matrici di Visual Basic discusse in precedenza sono considerate unidimensionali. Ciò significa che memorizzano un semplice elenco di nomi. Tuttavia, le matrici possono avere più dimensioni. Ad esempio, un array bidimensionale può essere confrontato con una griglia di valori.

Supponiamo che tu voglia salvare i dati di vendita giornalieri di gennaio per 5 squadre diverse. Ciò richiederà una matrice bidimensionale composta da 5 set di metriche per 31 giorni. Dichiariamo un array come questo:

Dim Jan_Sales_Figures (da 1 a 31, da 1 a 5) come valuta

Per accedere agli elementi dell'array Jan_Sales_Figure, è necessario utilizzare due indici indicanti il ​​giorno del mese e il numero del comando. Ad esempio, l'indirizzo di un elemento contenente dati di vendita per 2-oh squadre per 15 ° Gennaio sarebbe scritto così:

Gennaio_Cifre_Vendite(15, 2)

Allo stesso modo, puoi dichiarare un array con 3 o più dimensioni: aggiungi semplicemente dimensioni aggiuntive alla dichiarazione dell'array e usa indici aggiuntivi per fare riferimento agli elementi di questo array.

Dichiarazione di array in Excel Visual Basic

In precedenza in questo articolo, abbiamo già esaminato diversi esempi di dichiarazione di array in VBA, ma questo argomento merita uno sguardo più da vicino. Come mostrato, un array unidimensionale può essere dichiarato in questo modo:

Dim Team_Members (da 1 a 20) come stringa

Tale dichiarazione dice al compilatore VBA che l'array Team_Membri è costituito da 20 variabili a cui è possibile accedere con indici da 1 a 20. Tuttavia, potremmo pensare di numerare le nostre variabili di array da 0 a 19, nel qual caso l'array dovrebbe essere dichiarato in questo modo:

Dim Team_Members (da 0 a 19) come stringa

In effetti, per impostazione predefinita, la numerazione degli elementi dell'array parte da 0 e nella dichiarazione dell'array l'indice iniziale potrebbe non essere specificato affatto, in questo modo:

Dim Team_Members(19) come stringa

Il compilatore VBA tratterà tale voce come una dichiarazione di un array di 20 elementi con indici da 0 a 19.

Le stesse regole si applicano quando si dichiarano matrici Visual Basic multidimensionali. Come già mostrato in uno degli esempi, quando si dichiara un array bidimensionale, gli indici delle sue dimensioni sono separati da una virgola:

Dim Jan_Sales_Figures (da 1 a 31, da 1 a 5) come valuta

Tuttavia, se non si specifica un indice iniziale per entrambe le dimensioni dell'array e lo si dichiara in questo modo:

Dim Jan_Sales_Figures(31, 5) come valuta

quindi questa voce verrà trattata come un array bidimensionale, la prima dimensione del quale contiene 32 elementi con indici da 0 a 31 e la seconda dimensione dell'array contiene 6 elementi con indici da 0 a 5.

Matrici dinamiche

Tutti gli array negli esempi precedenti hanno un numero fisso di dimensioni. Tuttavia, in molti casi non sappiamo in anticipo quale dovrebbe essere la dimensione del nostro array. Possiamo uscire dalla situazione dichiarando una matrice enorme, la cui dimensione sarà sicuramente più grande del necessario per il nostro compito. Ma una tale soluzione richiederà molta memoria extra e può rallentare il programma. C'è una soluzione migliore. Possiamo usare un array dinamico: questo è un array la cui dimensione può essere impostata e modificata un numero qualsiasi di volte durante l'esecuzione di una macro.

Un array dinamico viene dichiarato con parentesi vuote, in questo modo:

Dim Team_Members() come stringa

Successivamente, dovrai dichiarare la dimensione dell'array durante l'esecuzione del codice usando l'espressione Ridimensiona:

ReDim Team_Members (da 1 a 20)

E se durante l'esecuzione del codice è necessario modificare nuovamente la dimensione dell'array, è possibile utilizzare nuovamente l'espressione ReDim:

Se Team_Size > 20 Allora ReDim Team_Members(1 To Team_Size) End If

Tieni presente che il ridimensionamento di un array dinamico in questo modo comporterà la perdita di tutti i valori memorizzati nell'array. Per memorizzare i dati già nell'array, è necessario utilizzare la parola chiave Conservacome mostrato di seguito:

Se Team_Size > 20 Allora ReDim Preserve Team_Members(1 To Team_Size) End If

Purtroppo la parola chiave Conserva può essere utilizzato solo per modificare il limite superiore di una dimensione di matrice. Il limite inferiore di un array non può essere modificato in questo modo. Inoltre, se l'array ha più dimensioni, utilizzare la parola chiave Conserva, è possibile ridimensionare solo l'ultima dimensione della matrice.

Lascia un Commento