Come i
vettori statici, i vettori dinamnici, delle sequenze di variabili tutti dello stesso tipo con un ordine preciso, a cui è possibile accedere attraverso l'indice.
Azione | Come fare |
---|
Dichiarazione | Dim Vettore() As Long |
Modifica dimensione | ReDim Preserve Vettore(0 To 6) |
Riempire con valori (variant) | Vettore = Array("Rosso", "Verde", "Giallo") |
Accedere all'elemento | Vettore(i) |
Prima e ultimo indice del vettore | LBound(Vettore) - Ubound(Vettore) |
Numero di elementi | NrElementi = Ubound(Vettore) - LBound(Vettore) + 1 |
Svuotare | Erase Vettore |
Da stringa a vettore | Vettore = Split("Rosso,Verde,Giallo",",") |
Da vettore a stringa | Stringa = Join(Vettore, ",") |
Da vettore a range | Range("A1:A5") = Vettore |
Da range a vettore | Vettore = Range("A1:A5") |
|
Per utilizzare un vettore dinamico deve essere prima dicharato e poi modificata la sua dimensione
Dim Frutti()
As String
ReDim Frutti(1
To 3)
Frutti(1) = "Arancia"
Frutti(2) = "Mela"
Frutti(3) = "Banana"
Vettore di variant
Dicharando un vettore di elementi Variant questo può contenere tutti i tipi di dati elementari
Un vettore può essere contenuto anche in un elelemento di tipo variant, definito così:
Modifica delle dimensioni
La funzione ReDim modifca la dimension di un array dinamico, senza altri parametri la funzione però non conserva i valori precedentemente contenuti, per conservare i valori può essere utilizzata la funzione ReDim Preserve:
Assegnazioni di valori ad un vettore
Essitono diversi metodi che consentono di riempire un vettore di variant con valori
Funzione Array
La funzione Array consente di assegnare ad un vettore una serie di valori separati da virgole; il vettore deve essere di tipo Variant.
Frutti =
Array("Arancia","Mela","Banana")
Funzione Split
La funzione split ha come parametro una stringa e un separatore: verranno assegnati al vettore i singoli valori stringa.
Frutti =
Split("Arancia,Mela,Banana",",")
Assegnazione da un Range
Molto comodo è poter assegnare ad una matrice i valori contenuti un range di celle (viene sempre creata una matice anche se di singola colonna o riga).
Differenze fra Collection e Vettori
Proviamo a chiarire le differenze fra vettori e
collection (che possono sembrare molto simili) e quando è meglio usare l'uno o l'altro tipo di dati:
- un vettore ha un dimensione fissa ed è preferibile quando il numero dei dati non cambia spesso;
- una collection è da preferire quando il numero dei dati varia di frequente;
- in una collection di dati elementari (non oggetti) i dati sono in sola lettura.
Indice iniziale di un array
Alcune note per capire l'indice iniziale di un array dinamico.
L'indice iniziale di un vettore dinamico può essere impostato in modo esplicito indicandolo in questo modo:
se non viene indicato il valore iniziale, come nel caso qui sotto, l'indice iniziale è lo 0.
Questo comportamento standard può essere modificato usando questa opzione Option base: se specificato imposta l'indice iniziale a 1 per tutti in vettori in cui non viene specificato esplicitamente il valore.
L'indice iniziale viene impostato a zero anche utilizzando la funzione Array o Split:
Vettore =
Array("Arancia", "Mela", "Banana")
Vettore =
Split("Arancia,Mela,Banana", ",")
Il comportamento è diverso invece se assegnamo ad un vettore (una matrice) un range, in questo caso l'indice iniziale è 1.
Ad esempio nel caso qui sotto le dimensioni del vettore sono (1 To 5, 1 To 1)