Potrebbe verificarsi una situazione in cui è necessario eseguire più volte un blocco di codice. In generale, le istruzioni vengono eseguite in sequenza: la prima istruzione nella funzione viene eseguita per prima, poi la seconda e così via.
I linguaggi di programmazione forniscono varie strutture di controllo che forniscono percorsi di esecuzione più complessi.
L'istruzione loop ci consente di eseguire un'istruzione o un gruppo di istruzioni più volte. Di seguito è riportata la vista generale dell'istruzione loop in VBA.
VBA fornisce i seguenti tipi di loop per gestire i requisiti di loop. Fare clic sui seguenti collegamenti per verificarne i dettagli.
per ciclo
Il ciclo for è una struttura di controllo della ripetizione che consente a uno sviluppatore di scrivere in modo efficiente un ciclo che deve essere eseguito un certo numero di volte.
Sintassi
Di seguito è riportata la sintassi per un ciclo for in VBA.
Per contatore = dall'inizio alla fine .... .... Avanti
Diagramma di flusso
Di seguito è riportato il flusso di controllo in modalità Loop -
- Il primo passo è in corso. Questo passaggio consente di inizializzare qualsiasi variabile di controllo del ciclo e di incrementare la variabile del contatore di passi.
- In secondo luogo, la condizione viene valutata. Se true, viene eseguito il corpo del ciclo. Se è false, il corpo del ciclo non viene eseguito e il flusso di controllo continua all'istruzione successiva immediatamente dopo il ciclo For.
- Dopo l'esecuzione del ciclo for, il flusso di controllo passa all'istruzione successiva. Questa istruzione consente di aggiornare qualsiasi variabile di controllo del ciclo. Viene aggiornato in base al valore del contapassi.
- La condizione viene ora valutata di nuovo. Se questo è vero, il ciclo viene eseguito e il processo viene ripetuto (il corpo del ciclo, quindi il passaggio viene incrementato e quindi la condizione di nuovo). Dopo che la condizione diventa falsa, il ciclo For termina.
esempio
Aggiungi un pulsante e aggiungi la seguente funzione.
Private Sub Constant_demo_Click() Dim a As Integer a = 10 For i = 0 To a Step 2 MsgBox "Il valore è i è: " & i Next End Sub
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato.
Il valore è i è: 0
Il valore è i è: 2
Il valore è i è: 4
Il valore è i è: 6
Il valore è i è: 8
Il valore è i è: 10
Esegue più volte una sequenza di istruzioni e riduce il codice che controlla la variabile di ciclo.
per... ciclo
Per ogni ciclo viene utilizzato per eseguire un'istruzione o un gruppo di istruzioni su ciascun elemento in un array o in una raccolta.
Per ogni ciclo è simile a For Loop; tuttavia, il ciclo viene eseguito per ogni elemento nell'array o nel gruppo. Pertanto, il contapassi non esisterà in questo tipo di ciclo. Viene utilizzato principalmente con gli array o utilizzato nel contesto di oggetti del file system per funzionare in modo ricorsivo.
Sintassi
Di seguito è riportata la sintassi di un ciclo For Each in VBA.
Per ogni elemento nel gruppo .... Avanti
esempio
Private Sub Constant_demo_Click() "fruits is an array fruits = Array("apple", "orange", "cherries") Dim fruitnames As Variant "iterazione usando Per ogni ciclo. Per ogni articolo In frutti nomifrutta = nomifrutta & Articolo & Chr(10) Next MsgBox nomifrutta End Sub
Quando il codice sopra viene eseguito, stampa tutti i nomi di frutta con un elemento per riga.
mela
arancia
ciliegia
Questo viene eseguito se c'è almeno un elemento nel gruppo e viene ripetuto per ogni elemento nel gruppo.
mentre..andare in loop
In un ciclo While While... Wend, se la condizione è True, tutte le istruzioni vengono eseguite finché non viene rilevata la parola chiave Wend.
Se la condizione è falsa, il ciclo termina e il controllo passa all'istruzione successiva dopo la parola chiave Wend.
Sintassi
Di seguito è riportata la sintassi del ciclo While..Wend in VBA.
Mentre le condizioni ... Wend
Diagramma di flusso
esempio
Private Sub Constant_demo_Click() Dim Counter: Counter = 10 While Counter< 15 " Test value of Counter. Counter = Counter + 1 " Increment Counter. msgbox "The Current Value of the Counter is: " & Counter Wend " While loop exits if Counter Value becomes 15. End Sub
Quando il codice precedente viene eseguito, verrà visualizzato quanto segue nel campo del messaggio.
Il valore attuale del contatore è: 11
Il valore attuale del contatore è: 12
Il valore attuale del contatore è: 13
Il valore attuale del contatore è: 14
Il valore attuale del contatore è: 15
Questo controlla la condizione prima di eseguire il corpo del ciclo.
fare..mentre loop
Il ciclo do...while viene utilizzato quando si desidera ripetere un insieme di istruzioni mentre una condizione è vera. La condizione può essere verificata all'inizio del ciclo o alla fine del ciclo.
Sintassi
Di seguito è riportata la sintassi del ciclo Do...While in VBA.
Condizione Do While ... ... Ciclo
Diagramma di flusso
esempio
L'esempio seguente usa un ciclo Do ... while per controllare lo stato all'inizio del ciclo. Le istruzioni all'interno del ciclo vengono eseguite solo se la condizione diventa True.
Private Sub Constant_demo_Click() Do While i< 5 i = i + 1 msgbox "The value of i is: " & i Loop End Sub
Il valore di i è: 1
Il valore di i è: 2
Il valore di i è: 3
Il valore di i è: 4
Il valore di i è: 5
Sintassi alternativa
C'è anche una sintassi alternativa per Do ... while loop che controlla lo stato alla fine del ciclo. La principale differenza tra queste due sintassi è spiegata nell'esempio seguente.
Do ... ... Ciclo durante la condizione
esempio
L'esempio seguente usa un ciclo Do... while per controllare lo stato alla fine del ciclo. Le istruzioni all'interno del ciclo vengono eseguite almeno una volta, anche se la condizione è False.
Private Sub Constant_demo_Click() i = 10 Do i = i + 1 MsgBox "Il valore di i è: " & i Loop While i< 3 "Condition is false.Hence loop is executed once. End Sub
Quando il codice precedente viene eseguito, stampa il seguente output in una finestra di messaggio.
Il valore di i è: 11
Le istruzioni do..While verranno eseguite fintanto che la condizione è True. (cioè) Il ciclo deve essere ripetuto finché la condizione non è False.
do..intil loop
Do ... intil loop non verrà utilizzato quando vogliamo ripetere un insieme di istruzioni mentre la condizione è falsa. La condizione può essere verificata all'inizio del ciclo o alla fine del ciclo.
Sintassi
Di seguito è riportata la sintassi del ciclo Do..Until in VBA.
Condizione Do Until ... ... Ciclo
Diagramma di flusso
esempio
L'esempio seguente usa Do... Before Loop per testare una condizione all'inizio del ciclo. Le istruzioni all'interno del ciclo vengono eseguite solo se la condizione è falsa. Esce dal ciclo quando la condizione diventa vera.
Private Sub Constant_demo_Click() i = 10 Do Until i>15 "La condizione è falsa. Quindi il loop verrà eseguito i = i + 1 msgbox ("Il valore di i è: " & i) Loop End Sub
Quando il codice precedente viene eseguito, stampa il seguente output in una finestra di messaggio.
Il valore di i è: 11
Il valore di i è: 12
Il valore di i è: 13
Il valore di i è: 14
Il valore di i è: 15
Il valore di i è: 16
Sintassi alternativa
Esiste anche una sintassi alternativa Do... Before Loop che verifica la condizione alla fine del ciclo. La principale differenza tra queste due sintassi è spiegata dal seguente esempio.
Do ... ... Ciclo fino alla condizione
Diagramma di flusso
esempio
L'esempio seguente usa Do... Before Loop per verificare la presenza di una condizione alla fine del ciclo. Le istruzioni all'interno del ciclo vengono eseguite almeno una volta, anche se la condizione è True.
Private Sub Constant_demo_Click() i = 10 Do i = i + 1 msgbox "The value of i is: " & i Loop Until i more15 "Condition is True. Quindi il loop viene eseguito una volta. End Sub
Quando il codice precedente viene eseguito, stampa il seguente output in una finestra di messaggio.
Il valore di i è: 11
do..Until le istruzioni verranno eseguite fintanto che la condizione è False. (cioè) Il ciclo deve essere ripetuto finché la condizione non è vera.
Record di controllo del ciclo
Le istruzioni di controllo del ciclo modificano l'esecuzione rispetto alla sequenza normale. Quando l'esecuzione esce dall'ambito, tutte le altre istruzioni di ciclo non vengono eseguite.
Dichiarazione e descrizione di controllo
Uscita operatore
L'uscita per viene utilizzata quando vogliamo uscire da un ciclo For in base a determinati criteri. Quando Exit For viene eseguito, il controllo passa all'istruzione successiva immediatamente dopo il ciclo For.
Sintassi
Di seguito è riportata la sintassi di Exit For Statement in VBA.
Diagramma di flusso
esempio
L'esempio seguente usa Exit For . Se il conteggio raggiunge 4, il ciclo For termina e il controllo passa all'istruzione successiva immediatamente dopo il ciclo For.
Private Sub Constant_demo_Click() Dim a As Integer a = 10 For i = 0 To a Step 2 "i è la variabile contatore ed è incrementata di 2 MsgBox ("Il valore è i è: " & i) Se i = 4 Allora i = i * 10 "Questo viene eseguito solo se i=4 MsgBox ("Il valore è i è: " & i) Exit For "Esce quando i=4 End If Next End Sub
Quando il codice precedente viene eseguito, stampa il seguente output nella finestra di messaggio.
Il valore è i è: 0
Il valore è i è: 2
Il valore è i è: 4
Il valore è i è: 40
Termina l'istruzione del ciclo For e trasferisce l'esecuzione all'istruzione immediatamente dopo il ciclo
Esci Fai
L'istruzione Exit Do viene utilizzata quando si desidera uscire da Do Loops in base a determinati criteri. Può essere utilizzato in entrambi i loop Do Do... While e Do... Before.
Quando viene eseguito un Exit Do, il controllo passa all'istruzione successiva immediatamente dopo il ciclo Do.
Sintassi
Di seguito è riportata la sintassi dell'istruzione Exit Do in VBA.
esempio
L'esempio seguente usa Exit Do . Se il contatore raggiunge 10, la riga di output Do termina e il controllo passa all'istruzione successiva immediatamente dopo il ciclo For.
Sub privato Constant_demo_Click() i = 0 Do While i<= 100 If i >10 Then Exit Do " Loop Esce se i>10 End If MsgBox ("Il valore di i è: " & i) i = i + 2 Loop End Sub
Quando il codice precedente viene eseguito, stampa il seguente output in una finestra di messaggio.
Il valore di i è: 0
Il valore di i è: 2
Il valore di i è: 4
Il valore di i è: 6
Il valore di i è: 8
Il valore di i è: 10
Termina un'istruzione Do While e trasferisce l'esecuzione all'istruzione immediatamente dopo il ciclo
Un ciclo è una struttura algoritmica, con l'aiuto del quale viene implementata la ripetizione multipla di un blocco di istruzioni.
Istruzione loop con contatore (For … Next)
L'istruzione For … Next consente di scorrere un insieme di istruzioni (istruzioni) un numero specificato di volte. Sintassi dell'istruzione:
Per contatore = valore_iniziale Per valore_finale
[Istruzioni]
[Istruzioni]
Prossimo[ contatore]
Parametro contatoreè una variabile numerica che cambia automaticamente il proprio valore in base al valore fare un passo dopo ogni iterazione del ciclo. Il ciclo viene eseguito fino a contatore£ valore_finale con un valore positivo del parametro fare un passo o fino a contatore³ valore_finale con un valore negativo del parametro fare un passo. Pertanto, il ciclo non verrà mai eseguito se, con un valore di passo positivo valore_iniziale più di valore_finale. Se il parametro Step fare un passo viene omesso, quindi per impostazione predefinita l'incremento della variabile contatore è impostato su 1.
L'istruzione Exit For termina l'esecuzione del ciclo "in anticipo" e trasferisce il controllo all'istruzione successiva all'istruzione del ciclo. Exit For viene solitamente inserito in un'istruzione condizionale, ad esempio:
Se condizione Quindi Esci per
Nota. In base alla sintassi dell'istruzione For, il parametro contatore- una variabile aritmetica di qualsiasi tipo, è sempre meglio utilizzare il tipo intero della variabile, poiché la parte frazionaria del valore di una variabile di tipo reale di solito presenta un errore. Ha a che fare con il modo in cui i numeri vengono archiviati in un computer.
Esempio 1
Trova la somma del primo 10 numeri naturali: S = 1 + 2 + 3 + ...+ 10 . Frammento di programma:
Dim I come Intero, S come Intero
S=0 " Azzeramento del valore della variabile S
Per i = da 1 a 10 "
Inizio del ciclo. Imposta i valori di inizio e fine
"Parametro del ciclo. Il passo del ciclo predefinito è 1.
S = S + io "
L'operatore di assegnazione viene eseguito ogni volta
" eseguendo il ciclo, in questo esempio 10 volte
Avanti I " Fine ciclo. Il valore del parametro ciclo viene incrementato.
In questo frammento di programma, il ciclo verrà eseguito esattamente 10 volte.
Esempio 2
Visualizza nella 1a colonna del foglio di lavoro (a partire dalla 2a riga) x valori nell'intervallo da 0 a 3,2 con un passaggio di 0,4.
Sottoscheda pubblica()
Dim x As Single, i As Integer
Per x = da 0 a 3.2 Passaggio 0.4
Sebbene la lunghezza dell'intervallo sia esattamente divisibile per il passaggio 0.4, il risultato sul foglio di lavoro è:
Cosa fare?
1. Puoi aumentare leggermente il valore finale, in questo esempio, invece di 3.2, scrivi 3.201.
2. Determinare il numero di ripetizioni del chicle e scrivere un ciclo su un contatore di tipo intero.
In questo caso, il programma sarà simile a:
Pubblico Sub Tab1()
Dim x As Single, i As Integer, n As Integer
n = CInt((3,2 - 0) / 0,4)
Per i = da 0 a n Passaggio 1
Celle(i + 2, 1) = x
Per ogni... Istruzione del ciclo successivo
Il ciclo For Each... Next consente di ripetere l'esecuzione di un gruppo di istruzioni per ogni elemento di una matrice o di una famiglia. Questa istruzione ha la seguente sintassi:
Per ciascuno elemento In Gruppo
[Istruzioni]
[Istruzioni]
Prossimo[ elemento]
Parametro elementoè una variabile che rappresenta un elemento di una famiglia o di un array. Discussione Gruppoè il nome dell'array o della famiglia. Le istruzioni vengono eseguite una sola volta per ogni membro del gruppo. L'uso dell'istruzione è conveniente perché non è necessario sapere in anticipo quanti elementi si trovano in un array o in una famiglia. Variabile elemento deve essere di tipo Variant.
Esempio 1
Trova la media aritmetica di tutti gli elementi dell'intervallo selezionato
Media funzione pubblica (intervallo come intervallo) come doppio
Dim Element come variante
Dim sum come doppio
Dim numero come intero
Quantità = 0
Per ogni elemento nell'intervallo
Importo = Importo + Articolo
Quantità = Quantità + 1
Elemento successivo
Media = Importo/Quantità
Applicazione. L'intervallo selezionato di celle adiacenti deve contenere numeri. I numeri nelle celle vuote sono considerati 0. Il testo nella cella risulterà in un errore.
Le istruzioni If... End If, Select... Case, For... Next, For Each... Next elencate sopra sono un gruppo di istruzioni di controllo che modificano l'ordine in cui i comandi vengono eseguiti. Le istruzioni di controllo possono essere nidificate in qualsiasi ordine.
In questa lezione considereremo di lavorare con un ciclo Per in VBA. Un esempio di utilizzo di un ciclo For mostrerà anche un esempio di creazione di formule in Excel utilizzando le macro.
Ciclo Per funziona secondo il principio di un contatore. Per Viene utilizzato nei casi in cui è necessario ripetere alcune azioni un numero predeterminato di volte. Ad esempio, il ciclo Per spesso usato durante la lettura di array.
Ciclo Per ha la seguente sintassi:
Per contatore =
inizio ciclo Per fine ciclo [fare un passo fare un passo]
gruppo di operatori, comandi, ecc.
Esci per
Prossimo contatore
- "contatore" - variabile che cambia in quella specificata "fare un passo". Se il passaggio non è specificato, ne viene eseguito uno per impostazione predefinita.
- "inizio ciclo", "fine ciclo numeri o variabili che indicano il limite inferiore del contatore e quello superiore. Il ciclo si ferma quando "contatore" >"fine ciclo" ( oppure, se il ciclo è invertito, es. con il passaggio -1, quindi "contatore"< "fine ciclo").
- Esci per- comando per forzare l'arresto del ciclo. Viene utilizzato nei casi in cui si è verificato un evento, dopo il quale è necessario interrompere l'esecuzione dei comandi nel ciclo o impedire il verificarsi di un errore.
Diamo un'occhiata a un paio di esempi di utilizzo di un ciclo Per. In futuro, ci incontreremo abbastanza spesso con questo ciclo.
Esempio 1
Date due colonne C ed E riempite di numeri:
Devi aggiungere i numeri nella colonna C con i numeri nella colonna E come segue:
C2+E21, C3+E20, ..., C21+E2. Genera il risultato nella colonna D come formula, ad es. il contenuto della cella del risultato dovrebbe essere "=C2+E21".
Il codice della macro si presenta così (leggiamo dove scrivere il codice):
Sub Ciclo_per()
"una costante che indica il limite del ciclo, cioè fino a che valore deve essere eseguito il ciclo
cost n=21
Per io = 2 Per n
"Crea una formula stringa e salvala in una cella
Celle(i, 4) = "=C" & CStr(i) & "+E" & CStr((n - i) + 2)
" continuazione durante l'esecuzione in un ciclo
Prossimo io
" resto del codice del programma
fine sub
Analizziamo il codice scritto:
- cost n = 21 - descrizione della costante n con valore 21, cioè numero di righe da scorrere Per;
- Per io = 2 Per n - i è un contatore che cambierà di 1 ad ogni iterazione del ciclo. Il contatore parte da 2 e termina quando i>n;
- Celle(i, 4) - cella dedicato foglio, i è il numero della riga, 4 è il numero della colonna in cui viene visualizzato il risultato. Nota che il nostro contatore i indica il numero di riga del foglio Excel;
- Avanti io- operatore per chiudere il loop e trasferire il puntatore a per. Tutto in mezzo Per e Prossimo viene eseguito in un ciclo;
- CStr- una funzione che converte un numero in testo.
Alla cella assegniamo la formula creata come segue "=C" & CStr(i) & "+E" & CStr((n - i) + 2). Segno & - "incollare" caratteri, linee. Di conseguenza, otteniamo la formula "=Cn+E((n - i) + 2)" dove n = 21, i è il contatore.
Allarmante? Sembra proprio così :)
Tutto. Dopo aver eseguito la macro, otterremo la seguente colonna (evidenziata) e in ogni cella la formula:
Esempio 2
Consideriamo ora un ciclo con il passaggio indicato. Dopo aver calcolato l'ultima macro, abbiamo ottenuto tre colonne, ora dobbiamo sottrarre D dalla colonna E e visualizzare le formule di sottrazione nella colonna F. Il codice della macro è il seguente:
Sub Ciclo_per_con_passo()
cost n=21
Per io = n Per 2 fare un passo -1
Celle(i, 6) = "=E" & CStr(id" & CStr(io)
Prossimo io
fine sub
In questo caso, tutto è uguale, solo il ciclo ora "corre" non da 2, ma da 21 a 2 con un passaggio (Step) -1.
Il risultato dell'esecuzione sarà il seguente:
Ciclo Per, in VBA, non è un singolo ciclo. In futuro verranno prese in considerazione un paio di opzioni in più per i loop, indispensabili quando si scrivono macro in Excel.
L'algoritmo del ciclo For….Next è mostrato in fig. 5.28.
Contatore – qualsiasi variabile VBA numerica, solitamente una variabile di tipo Integer o Long.
inizio - qualsiasi espressione numerica e definisce il valore iniziale della variabile Contatore.
fine - un'espressione numerica che determina il valore finale della variabile Contatore .
Dichiarazioni – uno, più o nessun operatore. Queste istruzioni eseguono il corpo del ciclo. VBA esegue ciascuna di queste istruzioni ogni volta che viene eseguito il ciclo.
Parola chiave Prossimo
Contatore=contatore+StepSise
Fig.9.28. Per... Algoritmo del ciclo successivo
Parola chiave Prossimo dice a VBA che è stata raggiunta la fine del ciclo. La variabile Counter facoltativa dopo la parola chiave Next deve essere la stessa variabile Counter specificata dopo la parola chiave For all'inizio della struttura del ciclo.
Sintassi:
Per contatore = dall'inizio alla fine
Quando si esegue un cicloPer … Prossimo VBAprocede come segue:
Assegna il valore rappresentato stella , variabile DA contro .
Esegue tutte le istruzioni rappresentate da Dichiarazioni fino a raggiungere la parola chiave Prossimo . Parola chiave Prossimo indica a VBA che è stata raggiunta la fine del corpo del ciclo.
Modifica una variabile DA contro per l'importo dimensione del passo (se è inclusa la parola opzionale Step) Se Step non è definito, VBA incrementa la variabile contatore di 1.
Ritorna all'inizio del ciclo e confronta il valore corrente della variabile DA contro con il valore rappresentato da End. Se il valore DA contro meno valore fine , VBA continua l'esecuzione dalla prima istruzione dopo la parola chiave Prossimo .
9.2.4. Input-output di array unidimensionali e bidimensionali
Vettore (Vettore) è una raccolta di variabili che hanno un nome e un tipo di base comuni. Un array è un modo conveniente per archiviare più elementi di dati correlati in un unico contenitore per una maggiore praticità ed efficienza di programmazione. Tutti gli elementi di dati archiviati in una matrice devono essere dello stesso tipo.
Un array consente di archiviare e manipolare molti elementi di dati tramite una singola variabile. Oltre a ridurre il numero totale di diversi nomi di variabili di cui è necessario tenere traccia, un altro grande vantaggio dell'utilizzo degli array è che è possibile utilizzare i loop per elaborare facilmente i diversi elementi degli array. Combinando array e strutture di loop (di solito For….Next) puoi scrivere un piccolo numero di istruzioni che elaborano una grande quantità di dati. L'esecuzione delle stesse attività utilizzando singole variabili può richiedere la scrittura di centinaia di istruzioni.
Dimensione matrice
I linguaggi di programmazione di solito utilizzano array unidimensionali e multidimensionali, alcuni dei quali descrivono oggetti relativamente semplici, mentre altri descrivono oggetti più complessi.
Matrici unidimensionali
Un esempio di array unidimensionale è mostrato nella Tabella 9.9.
Tabella n. 9.9
Nella programmazione, viene comunemente utilizzata la numerazione in base zero.
Per accedere ai dati archiviati in un elemento specifico di un array, si specifica il nome dell'array seguito da un numero, chiamato indice dell'elemento. L'indice è racchiuso tra parentesi. Ad esempio, se la matrice nella tabella 1.1 è denominata DoubleArray, l'istruzione seguente assegna il numero 45 a DoubleAny.
Doppio Qualsiasi = Doppia matrice (3)
In questa affermazione, il numero 3 è l'indice dell'array. Poiché la numerazione degli elementi inizia da zero, l'elemento a cui fa riferimento l'operatore è, in effetti, il quarto elemento dell'array DoubleArray.
Quando si esegue l'istruzione DoubleArray, VBA seleziona il valore 45 e memorizza tale valore nella variabile DoubleArray.
Lo stesso operatore può essere utilizzato durante la memorizzazione dei dati in un array:
Doppia matrice (5)=12.
Quando questa istruzione viene eseguita, VBA inserisce il valore 12 nell'elemento della matrice specificato, sostituendo il contenuto precedente di tale elemento.
Gli array unidimensionali sono comunemente usati per rappresentare vari elenchi di dati.
Matrici multidimensionali
Quando è necessario presentare tabelle di dati organizzate in righe e colonne, a tale scopo vengono utilizzati array multidimensionali.
In una matrice bidimensionale, l'indirizzo di ciascuna cella è costituito da due numeri: il numero di riga (primo indice) e il numero di colonna (secondo indice). In VBA puoi creare array fino a 60 dimensioni.
Se il numero di elementi nell'array non cambia, allora tale array viene chiamato statico.
Array statici e dinamici
Se è possibile modificare il numero di elementi in un array durante l'esecuzione di un programma VBA, tali array vengono chiamati dinamici. L'operatore ReDim viene utilizzato per modificare la dimensione di un array dinamico.
VBA mantiene un'area di memoria riservata per tutti gli elementi in un array finché esiste la variabile del tipo di array. Tali array sono chiamati statici perché il numero di elementi nell'array non cambia.
OperatoreOpzione Base
In genere, VBA utilizza array in base zero. L'istruzione Option Base consente di specificare 0 o 1 come seme predefinito per gli indici di matrice. Se l'operatore Opzione Base non utilizzato, VBA avvia la numerazione degli indici da 0 (impostazione predefinita). È necessario inserire un'istruzione Option Base nell'area di dichiarazione di un modulo prima di dichiarare variabili, costanti o procedure. Non è possibile inserire un'istruzione Option Base all'interno di una procedura. Puoi avere solo un'istruzione Option Base in un modulo.
Sintassi:
Opzione Base 0|1
Dichiarazione di matrice
Dichiarazione di un array con un operatore Dim ha la seguente sintassi.
Sintassi:
DimVarName()
Dim VarName ( superiore, superiore]….)[ Come genere],
VarName è qualsiasi nome per una matrice che soddisfa le regole VBA per la denominazione degli identificatori.
Indici - dimensione dell'array.
Come tipo - tipo di dati.
Inferiore: il limite inferiore del valore dell'indice.
Superiore: il limite superiore del valore dell'indice.
Tipo - tipo di dati
Se ometti il tipo, tutti gli elementi dell'array saranno di tipo Variant. VBA inizializza gli elementi degli array numerici su zero e gli elementi degli array di stringhe su stringhe vuote.
Dim str_array (da 1 a 100) come stringa
Variante dimmer_array()
Dim str_Multiplication (da 0 a 15, da 0 a 15) come stringa
Utilizzo di array
Per accedere a un elemento dell'array, è necessario specificare il nome dell'array seguito dal valore dell'indice, racchiuso tra parentesi.
L'accesso a un elemento dell'array ha la seguente sintassi.
Sintassi.
arrayName (validIndex1, ....)
validIndex è il nome dell'array.
validIndex1 è un valore di indice valido per la prima dimensione della matrice.
validIndex2 è un valore di indice valido per la seconda dimensione della matrice.
È necessario fornire un valore di indice per ciascuna dimensione dell'array ogni volta che si accede a qualsiasi elemento dell'array.
I/O di array unidimensionali
Quando si inserisce un array unidimensionale, è necessario inserire in sequenza il 1°, il 2°, ecc. elementi dell'array, allo stesso modo fanno l'output. Per inserire o emettere un array, è necessario organizzare un ciclo. È più conveniente utilizzare un algoritmo che utilizza un ciclo incondizionato per immettere e generare un array unidimensionale.
L'algoritmo di input/output per un array unidimensionale è mostrato nella Figura 5.29.
La procedura è spiegata di seguito.
Sub Array () - il nome della procedura.
Dim Mas (5) As Integer - dichiarata una matrice unidimensionale con 5 elementi, tipo intero.
Dim s As String: dichiarata una variabile di lavoro per l'output finale dei dati dall'array nella finestra di dialogo. As String è il tipo di dati nella variabile da archiviare.
For i = 1 To 5 – la procedura nel primo ciclo For….Next prende gli interi da 1 a 5 e li inserisce in un array.
Mas (i) = InputBox (i) - Immettere un numero intero per l'i-esimo elemento.
Avanti: passaggio al secondo ciclo (gli elementi dell'array vengono inseriti in una stringa e visualizzati in una finestra di dialogo utilizzando l'operatore MsgBox).
Per i = 1 To 5 - elementi nella riga da 1 a 5.
s = s & Mas(i) & “ ;” - formazione di una stringa da elementi dell'array. L'array viene visualizzato su una riga. Gli elementi della matrice sono separati dal carattere ";".
MsgBox s - output dell'array immesso in precedenza.
Fig.5.27. Algoritmo I/O unidimensionale
Riso. 9.29. Algoritmo e procedura per input-output di un array unidimensionale
Input/output dell'array 2D
L'algoritmo e la procedura per l'input e l'output di un array bidimensionale sono mostrati nella Figura 5.30.
Descrizione di questa procedura:
Sub Array () - il nome della procedura
Dichiarazione delle variabili utilizzate in questa procedura:
Dim Mas (5, 5) As Integer - dichiarato un array bidimensionale con 5 colonne e cinque righe, il tipo di numeri è interi.
Dim s As String: dichiarata una variabile di lavoro per l'output finale dei dati dall'array nella finestra di dialogo. As String: il tipo di dati nella variabile da archiviare
Next i - fine dell'operazione di assegnazione delle variabili
Immissione di elementi dell'array nella memoria del computer:
Per i = 1 To 5 - l'input viene eseguito dal primo elemento della prima riga, quindi dal secondo, ecc.
Per j = 1 A 5 fino alla fine della prima riga, quindi dal primo elemento della seconda riga, e così via.
Mas(i,j) = InputBox(i,j) – operatore per l'inserimento di elementi di array nella memoria del computer
Riso. 9.30. Algoritmo e procedura per input-output di un array bidimensionale
Algoritmi di ordinamento degli array
A titolo di esempio, presentiamo l'algoritmo e la procedura per ordinare un array unidimensionale utilizzando il metodo "bolla".
L'output degli elementi dell'array inserito dalla memoria del computer:
Per i = da 1 a 5 - l'output viene eseguito in modo simile all'input
s = s & Mas(i,j) & “ ; "
s = s & Chr (13) - avanzamento riga (output non in una riga, ma in più, come nell'array di input)
Next i - la fine dell'istruzione For….Next
MsgBox s: visualizza l'array immesso in precedenza nella finestra di dialogo
End Sub - la fine della procedura.
Dichiarazioni di ciclo
In VBA Esistono due tipi principali di loop loop con un contatore (parametrico) e loop con una condizione (iterazione).
I loop con un contatore vengono utilizzati nei casi in cui è necessario eseguire un'azione un certo numero di volte.
I cicli condizionali vengono utilizzati quando alcune azioni nel programma devono essere ripetute fino a quando non viene soddisfatta una determinata condizione.
Cicli con un parametro Per il prossimo
Struttura del ciclo:
Per Loop_Parameter = Valore_iniziale Per Valore_finale
[Passo passo]
Operatori
[uscire per]
Prossimo [Parametro_ciclo]
dove per parola chiave VBA (da), che denota l'inizio del ciclo;
loop_parameter variabile definita come contatore di loop;
Start_Value un numero che specifica il valore iniziale del parametro del ciclo;
Alla parola chiave VBA (prima) dividere
Valore_Inizio e Conoscenza_Finale;
End_Value un numero che specifica il valore del parametro loop,
A cui il ciclo finisce;
Parola chiave passo VBA (passo) utilizzato per
Assegnazioni di fasi del ciclo, argomento opzionale;
Step è un numero che specifica la fase del ciclo, ad es. il valore a cui
Aumenta (o diminuisce) il valore del parametro
Pedala ad ogni passo. Questo numero potrebbe essere
negativo;
Esci per Operatore di uscita anticipata del circuito (opzionale);
Prossimo parola chiave VBA (successivo) denotando
Fine ciclo.
Ciclo di lavoro:
Passaggio 1 Innanzitutto, viene determinato il parametro del ciclo e vengono calcolati e memorizzati i valori di inizio e fine di questa variabile.
Passaggio 2 Al parametro loop viene assegnato un valore iniziale.
Passaggio 3 Il valore iniziale del parametro loop viene confrontato con il valore finale.
Se il parametro del ciclo è maggiore del valore finale, il programma esce immediatamente dal ciclo e salta alla riga di codice che segue il ciclo.
Passaggio 4 Viene eseguito il corpo del ciclo.
Passaggio 5 Dopo aver eseguito il corpo del ciclo, il valore successivo viene assegnato al parametro del ciclo. Vai al passaggio 3.
Nota.
1. Se viene utilizzata la parola chiave fare un passo , quindi il parametro del ciclo cambia in base al numero specificato dopo questa parola. Se la parola fare un passo mancante, il valore del passo è uguale a uno.
Esempio 1
Per I = da 0 a 10 Passaggio 2 (valore I aumenterà di 2)
2. Per... Ciclo successivo può essere terminato prematuramente al raggiungimento di qualsiasi condizione. Per fare ciò, nel punto giusto del loop, è necessario posizionare l'operatore Esci per.
Esempio 2
Dim S come intero
Dim j come intero
S=2
Per j = da 1 a 10
S = S + j
Se S > 6 Allora
Esci per (Esci dal ciclo se il valore S > 6)
Finisci se
Avanti j
MsgBox(S)
Loop condizionali (iterativi)
Se un'azione (diverse azioni) deve essere eseguita molte volte, ma non si sa in anticipo quante volte e dipende da alcune condizioni, allora dovresti usare un ciclo con una precondizione o una postcondizione.
In VBA ci sono due cicli principali FATE...LOOP con condizione inserita per parola chiave Mentre , e con la condizione introdotta dalla parola chiave Fino a quando . Entrambi possono essere precondizione o postcondizione.
Sintassi:
dove fare parola chiave (fare);
Mentre parola chiave (ancora);
Fino a quando parola chiave (finché);
ciclo continuo una parola chiave che indica la fine del ciclo;
<условие>espressione logica, la cui verità è verificata
All'inizio di ogni esecuzione del corpo del ciclo;
<тело_цикла>sequenza arbitraria di operatori;
Fare... Durante la costruzione si legge: fare finché la condizione è soddisfatta. Nella progettazione Fare... mentre per
Il costrutto Do... Until recita: continuare fino a quando la condizione non è soddisfatta. Nella progettazione Fare... Fino per aumentare il passo, dovresti scrivere un operatore speciale, perché in esso, in contrasto con il design Per , questo non viene eseguito automaticamente.
Condizione scritta dopo la parola chiave Fino a quando , viene verificato alla fine di ogni iterazione (dopo l'esecuzione del corpo del ciclo). Nota che qui non funziona esattamente come nel ciclo Mentre . Se la condizione è vera ( Vero ), quindi il ciclo termina. Se la condizione non è soddisfatta (è false Falso ), quindi il corpo del ciclo viene eseguito di nuovo.
Esempio 1
Formulazione del problema. Calcolare la somma di una serie finita usando una procedura di subroutine.
Tecnologia di esecuzione delle attività:
1. Dati iniziali: io Z
Risultato: S R .
2. Digitare nel modulo standard del progetto la seguente procedura utente utilizzando un loop con una precondizione mentre:
summa()
Dim S come intero
Dim i come intero
S=0
io = 1
Fai mentre io<= 10
S=S+i^2
io = io + 1
ciclo continuo
MsgBox(S)
fine sub
3. Digitare nel modulo standard del progetto la seguente procedura utente utilizzando un loop con una precondizione Fino a quando :
summa()
Dim S come intero
Dim i come intero
S=0
io = 1
Finché i > 10
S=S+i^2
io = io + 1
ciclo continuo
MsgBox(S)
fine sub
4 Digitare nel modulo standard del progetto la seguente procedura utente, utilizzando un loop con una postcondizione mentre:
summa()
Dim S come intero
Dim i come intero
S=0
io = 1
S=S+i^2
io = io + 1
Ciclo mentre i<= 10
MsgBox(S)
fine sub
5 Digitare nel modulo standard del progetto la seguente procedura utente, utilizzando un loop con una postcondizione Fino a quando :
summa()
Dim S come intero
Dim i come intero
S=0
io = 1
S=S+i^2
io = io + 1
Ciclo fino a i > 10
MsgBox(S)
fine sub