lettura normale

Le variabili di tipo Array in una macro Excel

In questa lezione ti spiego come creare una variabile di tipo array in una macro Excel.

Cosa sono gli array? Una variabile di tipo Array è una variabile che può contenere contemporaneamente più valori dello stesso tipo di dati. E' come una tabella, un vettore o una matrice. Può avere una dimensione (es. vettore) o avere più dimensioni (es. matrici). Nelle macro Excel esistono due tipi di array: statici o dinamici.

Per creare un Array in una macro Excel, devi dichiarare la variabile tramite l'istruzione Dim e qualsiasi tipo dati (es. Integer, Object, ecc.).

Il nome dell'array deve essere seguito da due parentesi tonde ().

Dim nomeArray() As Integer

Esistono due tipi di variabili di tipo array

  • Gli array statici
    Le variabili array statiche sono quelle che hanno una dimensione fissa. Quando crei una variabile array statica, devi specificare il numero di elementi che conterrà. Una volta scelto non puoi più modificarlo. Ad esempio, per dichiarare una variabile array statica di 5 elementi, devi indicare 4 tra le parentesi tonde. Gli elementi dell'array saranno numerati da 0 a 4.

    Dim nomeArray(4) As Integer

  • Gli array dinamici
    Le variabili array dinamiche non hanno una dimensione fissa. Puoi dichiarare l'array statico senza indicare il numero di elementi. La dimensione dell'array puoi modificarla durante l'esecuzione del programma. Ad esempio, per creare una variabile array dinamica non inserire nulla tra le parentesi tonde.

    Dim nomeArray() As Integer

Nei prossimi paragrafi ti spiego come creare

Gli array statici

Ti faccio un esempio pratico.

Considera un foglio di calcolo con dei valori numerici nell'intervallo di celle B2:B4.

un esempio

Digita questa macro.

  1. Sub Macro()
  2. Dim myArray(2) as Integer
  3. Dim totale, i As Integer
  4. For i = 0 To 2
  5. myArray(i) = Cells(2 + i, 2).Value
  6. Next i
  7. totale = myArray(0) + myArray(1) + myArray(2)
  8. Range("B6").Value = totale
  9. End Sub

La macro crea una variabile array statica chiamata "myArray" di tipo Integer composta da 3 elementi tramite l'istruzione Dim myArray(2) as Integer. Ogni elemento ha un indice da 0 a 2.

Il ciclo For i = 0 To 2 legge i valori nell'intervallo B2:B3

Poi li assegna agli elementi dell'array myVar tramite l'istruzione di assegnazione myArray(i) = Cells(2 + i, 2).Value.

L'indice di un array comincia sempre da zero. Nelle macro di Excel l'indice degli array comincia da zero. Quindi, il primo elemento dell'array è associato al numero 0 nell'indice. Il secondo elemento è associato al numero 1 nell'indice, ecc. Se vuoi puoi comunque cambiare questa impostazione predefinita tramite l'istruzione Option Base 1 e far partire l'indice degli array da 1 all'interno della macro.

Infine, la macro somma i valori negli elementi totale=myArray(0)+myArray(1)+myArray(2) e stampa il risultato 9 nella cella B6.

il risultato è 9

Nota. Per leggere un elemento dentro l'array devi digitare il nome dell'array e indicare l'indice dell'elemento che ti interessa tra parentesi tonde. Ad esempio, per leggere il primo elemento dell'array digita myArray(0). Per accedere al secondo elemento digita myArray(1). E via dicendo.

Gli array dinamici

Ti faccio un altro esempio pratico.

Considera dei valori nell'intervallo di celle B2:B4

un esempio

Digita questa macro.

  1. Sub Macro()
  2. Dim myArray as Integer
  3. Dim totale, i As Integer
  4. ReDim MyArray(2)
  5. For i = 0 To 2
  6. myArray(i) = Cells(2 + i, 2).Value
  7. Next i
  8. totale = myArray(0) + myArray(1) + myArray(2)
  9. Range("B6").Value = totale
  10. End Sub

La macro crea una variabile array dinamica chiamata "myArray" di tipo integer tramite l'istruzione Dim myArray() as Array.

In questo caso la variabile di tipo array è dinamica e inizialmente non è definita la dimensione.

Quindi, prima di assegnare i valori all'array devi dimensionarlo (dargli una dimensione) tramite l'istruzione ReDim MyArray(2)

La macro legge i valori nelle celle B2:B3, li assegna agli elementi dell'array e li somma myArray(0)+myArray(1)+myArray(2).

Nella cella B9 viene mostrata la somma ossia 9.

il risultato è 9

Qual è la differenza tra l'array statico e dinamico? La variabile array statica non ha una dimensione fissa. Quindi, puoi modificare e aggiungere altri elementi all'array, in qualsiasi momento durante l'esecuzione della macro, usando l'istruzione ReDim. Ad esempio, per aggiungere altri 5 elementi all'array myArray ti basta scrivere

ReDim myArray(4)

Gli array multidimensionali

Le variabili array ti permettono anche di dichiarare un array multidimensionale, ovvero un array che contiene più di una dimensione.

Per dichiarare una matrice ossia un array a due dimensioni, una per le righe e l'altra per le colonne, devi scrivere

Dim Matrice(1 To righe, 1 To colonne) As Integer

Ad esempio, per dichiarare una matrice 3x3 puoi scrivere

Dim Matrice(1 To 3, 1 To 3) As Integer

Cos'è una matrice? Una matrice è un tipo di variabile array multidimensionale. Ad esempio, una matrice può rappresentarla tramite una tabella di dati con righe e colonne. Una matrice 3x3 ha tre righe e tre colonne.
un esempio di matrice o tabella 3x3

Per inserire i dati nella matrice puoi usare un doppio ciclo For-Next per scorrere tutte le celle della matrice e assegnare i valori corrispondenti.

For i = 1 To 3
For j = 1 To 3
Matrice(i, j) = Cells(i, j).Value
Next j
Next i

La funzione Cells() ti permette di leggere i dati di una tabella sul foglio Excel e assegnarli alle celle corrispondenti della matrice.

Come si accede agli elementi della matrice?

Per accedere ai dati nella matrice devi usare la sintassi dell'indice a due dimensioni.

In pratica, devi specificare il numero della riga e della colonna dell'elemento che vuoi leggere.

myArray(riga, colonna)

Ad esempio, per accedere al terzo elemento sulla seconda riga devi scrivere

myArray(2, 3)

Allo stesso modo puoi accedere a ogni altro elemento della matrice.

Perché gli array sono utili? Le variabili array sono molto utili se lavori con grandi quantità di dati perché, invece di gestire ogni singolo dato separatamente, puoi memorizzarli tutti in un'unica variabile array ed elaborarli come un'entità unica. Questo rende la macro più efficiente e meno soggetta a errori.




Se qualcosa non ti è chiaro, scrivi la tua domanda nei commenti.




FacebookTwitterLinkedinLinkedin