Come utilizzare Excel VBA Array?

È possibile eseguire le macro da Visual Basic Editor posizionando il cursore nella macro e premendo il tasto F5 o da Excel aprendo la finestra di dialogo Macro (ALT + F8) scegliendo la macro da eseguire e facendo clic su Esegui. È meglio eseguire queste macro da Visual Basic Editor utilizzando Debug> Step Into (premendo F8) in modo da poterle guardare mentre funzionano. Istruzione Se la scheda Sviluppatore non è nella barra multifunzione .. Aprire Excel.

  • Vai a VBA Editor (premi Alt + F11)

  • Vai alla finestra immediata. (Ctrl + G)

  • Scrivi sotto il codice.

Application.ShowDevTools = True

Come inserire il codice VBA in Excel

Vai alla scheda Sviluppatore> Gruppo di codice> * Visual Basic

Fare clic su Inserisci> * Modulo.

  • Aprirà un modulo vuoto per te.

  • Scrivi / Incolla il codice fornito in quel Modulo

Untitled-1

Come eseguire il codice VBA in Excel

Seleziona un punto qualsiasi tra il codice, * Sub… End Sub

Fare clic su Run & Run Sub * o

F5

Untitled-1

Variabili array statiche Invece di utilizzare diverse variabili univoche per memorizzare le informazioni, è possibile utilizzare una variabile array.

Quando sai quanti elementi devi memorizzare nell’array, puoi usare una variabile di array statica come questa:

Il codice Sub TestStaticArray () 'memorizza 10 nomi nella cartella di lavoro nella variabile array MyNames () Dim MyNames (1 To 10) As String' dichiara una variabile array statica Dim iCount As Integer For iCount = 1 To ThisWorkbook. Sheets.Count MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name Debug.Print MyNames (iCount) Next iCount Cancella MyNames () 'cancella il contenuto della variabile, libera un po' di memoria End Sub ==== Decode

Dim MyNames (da 1 a 10) As String

Abbiamo dimensionato un singolo MyNames verificabile come una stringa, che può contenere 10 elementi al suo interno. Quindi MyNames verificabile è un tipo Array.

Dim iCount As Integer

Abbiamo dichiarato una singola variabile iCount come Integer, che può contenere solo Numeric Integer di tipo Value

For iCount = 1 To ThisWorkbook.Sheets.Count

ThisWorkbook.Sheets.Count ci fornirà il numero di fogli in una cartella di lavoro.

ThisWorkbook, si riferisce alla cartella di lavoro, in cui è stato scritto il codice.

MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name

Utilizzando un ciclo, stiamo assegnando, il nome di ogni foglio a un singolo verificabile chiamato MyNames. MyNames è un tipo di array verificabile, quindi memorizzerà il nome di ogni foglio in ogni elemento dell’array.

Debug.Print MyNames (iCount)

Subito dopo aver assegnato il valore a ogni elemento di un array, verrà stampato lo stesso in ImmediateWindow, per impostazione predefinita nella parte inferiore della finestra VBA.

È possibile visualizzare l’assegnazione di ogni valore e visualizzarne il valore in ImmediateWindow.

Image

Avanti iCount

Next viene utilizzato per dire a For Loop in Excel VBA, di ripetere di nuovo la stessa attività, aumentando iCount Counter, finché iCount non ha raggiunto il numero totale di fogli, nella cartella di lavoro.

Variabili di matrice dinamica Le variabili di matrice dinamica sono utili quando non sai in anticipo su quanti elementi devi memorizzare le informazioni.

Dichiarate le variabili di matrice dinamica proprio come una variabile di matrice statica, tranne per il fatto che non fornite alcuna informazione sulla dimensione della matrice.

Nell’esempio sopra (Dim MyNames (da 1 a 10) As String) se il numero di fogli è maggiore di 10, si verificherà un errore, poiché MyNames non sarà in grado di memorizzare più di 10 elementi.

Il codice Sub TestDynamicArray () 'memorizza tutti i nomi nella cartella di lavoro nella variabile array MyNames () Dim MyNames () As String' dichiara una variabile array dinamica Dim iCount As Integer Dim Max As Integer Max = ThisWorkbook.Sheets. Count 'trova la dimensione massima dell’array ReDim MyNames (1 To Max)' dichiara la variabile dell’array con la dimensione necessaria For iCount = 1 To Max MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name MsgBox MyNames (iCount) Next iCount Cancella MyNames () 'cancella i contenuti variabili, libera un po' di memoria End Sub ==== Decode

Dim MyNames () As String

Abbiamo dimensionato un singolo MyNames verificabile come una stringa, che è un tipo Array, a causa dell’apertura e della chiusura di Paranthesis, dopo il nome verificabile, ma non saremo in grado di memorizzare alcun dato in esso, poiché non abbiamo fornito il suo UpperLevel.

ReDim MyNames (1 To Max)

Redim è usato per ridimensionare l’array, assegnerà ora il livello superiore del tipo di array variabile.

In questo caso, numero totale di fogli nella cartella di lavoro (Max = ThisWorkbook.Sheets.Count)

===

MsgBox MyNames (iCount)

Nell’ultimo esempio, abbiamo stampato il valore nelle variabili nella finestra immediata, questa volta stampiamo il valore in un MessageBox, che apparirà così ..

Image

Se sai che avrai bisogno di una variabile array con 1000 elementi, usa una variabile statica. Lo svantaggio è che utilizzerai la memoria per 1000 elementi ogni volta, anche nei casi in cui memorizzi solo informazioni su 10 elementi. Se utilizzi una variabile array dinamico, utilizzerai la memoria più efficiente.

A volte non è possibile calcolare quanto grande dovrà essere la variabile dell’array. In questi casi, la dimensione della variabile dell’array deve essere aumentata secondo necessità. Quando si utilizza un’istruzione ReDim per modificare la dimensione della variabile dell’array, anche il contenuto della variabile viene cancellato per evitare di eliminare il contenuto della variabile quando si ridimizza la variabile dell’array, sarà necessario utilizzare l’istruzione ReDim Preserve.

Il codice Sub GetFileNameList () 'memorizza tutti i nomi di file nella cartella corrente Dim FolderFiles () As String' dichiara una variabile di matrice dinamica Dim tmp As String, fCount As Integer fCount = 0 tmp = Dir (" D: \ Test \. ") Mentre tmp <> Empty fCount = fCount + 1 ReDim Preserve FolderFiles (1 To fCount) 'dichiara di nuovo la variabile array (size + 1) FolderFiles (fCount) = tmp tmp = Dir Wend MsgBox fCount &" i nomi dei file sono trovato nella cartella "& CurDir Erase FolderFiles 'cancella i contenuti variabili, libera un po' di memoria End Sub ==== Decode

Dim FolderFiles () As String

Abbiamo dimensionato un singolo FolderFiles verificabile come una stringa, che è un tipo Array, a causa dell’apertura e della chiusura di Paranthesis, dopo il nome verificabile, ma non saremo in grado di memorizzare alcun dato in esso, poiché non abbiamo fornito il suo UpperLevel.

tmp = Dir (“D: \ Test \.”)

Il comando Dir funziona come un esploratore, che può contenere il nome di tutti i file e le cartelle in una directory. Puoi anche limitare tutti i file ad alcuni criteri specifici. Dir (“D: \ Test \ *. Pdf”) limiterà da tutti i file a solo file PDF o estensioni.

Mentre tmp <> Vuoto

Invece di Per il ciclo in Excel VBA, questa volta stiamo ripetendo la stessa azione, utilizzando Excel VBA MENTRE LOOP, dove i criteri per terminare il ciclo erano impostati come tmp non uguale a vuoto. Quindi, fino a quando, c’era un valore in tmp verificabile, il ciclo lo farà lavoro.

ReDim Preserve FolderFiles (1 To fCount)

I FolderFiles verificabili in array non hanno alcun livello superiore nella posizione di partenza. Ma ad ogni ripetizione lo farà aumentare il suo livello superiore con il comando ReDim. In primo luogo eseguire 1, poi 2 .. e così via, fino a fCount. Tuttavia ad ogni aumento del livello superiore, perderà tutte le variabili già assegnate. memorizzare il valore già assegnato.

Wend

Wend era solito dire ai cicli For in VBA, per ripetere di nuovo la stessa operazione, finché i criteri non soddisfacevano.

MsgBox fCount & “i nomi dei file si trovano nella cartella” & CurDir

Ad ogni ripetizione, fcout aumenterà di +1 e il suo valore finale sarà inferiore al numero di file trovati in quella directory / cartella. Il comando CurDir fornisce il nome della directory corrente. In questo caso “D: \ Test”

Image