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.
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
Per... Ciclo successivo in VBA Excel, la sua sintassi e descrizione dei singoli componenti. Esempi di utilizzo del ciclo For...Next.
Il ciclo For...Next in Excel VBA è progettato per eseguire un gruppo di istruzioni il numero di volte richiesto, specificato dalla variabile di controllo del ciclo: il contatore. Durante l'esecuzione del ciclo, il valore del contatore dopo ogni iterazione viene incrementato o decrementato del numero specificato dall'espressione dell'istruzione Step o, per impostazione predefinita, di uno. Quando è necessario eseguire il loop su elementi il cui numero e indicizzazione in un gruppo (intervallo, matrice, raccolta) sono sconosciuti, utilizzare .
Per... Sintassi del ciclo successivo
Per contatore = dall'inizio alla fine [Passo passo] [istruzioni] [Esci per] [istruzioni] Avanti [contatore] Per contatore = dall'inizio alla fine [Passo passo] [istruzioni] [Esci per] [istruzioni] Avanti [contatore]Le parentesi quadre indicano gli attributi facoltativi del ciclo For...Next.
Per... Componenti del ciclo successivo
Componente | Descrizione |
contatore | Attributo richiesto. Variabile numerica che funge da contatore, detta anche variabile di controllo del ciclo. |
inizio | Attributo richiesto. Espressione numerica che specifica il valore iniziale del contatore. |
fine | Attributo richiesto. Espressione numerica che specifica il valore finale del contatore. |
Fare un passo* | Attributo facoltativo. Un'istruzione che indica che il passaggio del ciclo verrà impostato. |
fare un passo | Attributo facoltativo. Espressione numerica che specifica la fase del ciclo. Può essere sia positivo che negativo. |
dichiarazioni | Attributo facoltativo**. Operatori nel tuo codice. |
Esci per | Attributo facoltativo. Un'istruzione di uscita da un ciclo prima che termini. |
Avanti [contatore] | Qui contatore- attributo opzionale. Questo è lo stesso nome della variabile di controllo del ciclo, che può essere omesso qui. |
*Se attributo fare un passo mancante, il ciclo For...Next viene eseguito con un passaggio predefinito di 1 .
**Se non si utilizza il proprio codice nel ciclo, il significato dell'utilizzo del ciclo viene perso.
Per... Esempi di loop successivi
Puoi copiare i loop di esempio nel tuo modulo VBA, eseguirli uno per uno e vedere i risultati.
Il ciclo più semplice
Riempiamo le prime dieci celle della prima colonna del foglio Excel attivo con numeri da 1 a 10:
Sub test1() Dim i As Long For i = 1 To 10 Cells(i, 1) = i Next End Sub
Il ciclo di passi più semplice
Un'istruzione Step con un valore di 3 viene aggiunta al ciclo precedente e i risultati vengono scritti nella seconda colonna:
Sub test2() Dim i As Long For i = 1 To 10 Step 3 Cells(i, 2) = i Next End Sub
Ciclo con argomenti negativi
Questo ciclo riempie le prime dieci celle della terza colonna in ordine inverso:
Sub test3() Dim i As Long For i = 0 To -9 Step -1 Cells(i + 10, 3) = i + 10 Next End Sub
Aumenta la dimensione del passaggio a -3 e scrivi i risultati nella quarta colonna del foglio Excel attivo:
Sub test4() Dim i As Long For i = 0 To -9 Step -3 Cells(i + 10, 4) = i + 10 Next End Sub
ciclo annidato
Il ciclo esterno imposta in sequenza gli indici delle prime dieci righe del foglio attivo e il ciclo nidificato somma i numeri nelle prime quattro celle della riga con l'indice corrente e scrive la somma nella cella della quinta colonna. Prima di iniziare il ciclo annidato con addizione cumulativa, azzeriamo la quinta cella della riga corrispondente, in modo che se in essa viene trovato un numero, non verrà aggiunto al totale.
Sub test5() Dim i1 As Long, i2 As Long For i1 = 1 To 10 , 5) + Cells(i1, i2) Next Next End Sub
Uscita ad anello
Nella sesta colonna del foglio attivo, scriviamo i nomi di dieci animali, ovviamente, usando il ciclo For... Next:
Sub test6() Dim i As Long For i = 1 To 10 Cells(i, 6) = Choose(i, "Orso", "Elefante", "Giraffa", "Antilope", _ "Coccodrillo", "Zebra", "Tigre", "Lucertola", "Leone", "Behemoth") Next End Sub
Il prossimo ciclo cercherà nella sesta colonna il coccodrillo che ha mangiato le galosce. Nella cella della settima colonna, finché non incontra un coccodrillo, il loop scriverà la riga "C'era un ciclo qui", e quando trova un coccodrillo scriverà "Ha mangiato galoshes" e smetterà di funzionare eseguendo l'uscita Per comando. Questo sarà visto nelle celle accanto ai nomi degli animali sotto il coccodrillo, che non conterranno il testo "C'era un ciclo qui".
Sub test7() Dim i As Long For i = 1 To 10 If Cells(i, 6) = "Coccodrillo" Then Cells(i, 7) = "He ate galoshes" Exit For Else Cells(i, 7) = "Qui c'era un ciclo" End If Next End Sub
Riceverai tali dati sul foglio Excel attivo se lo esegui in sequenza nell'editor VBA tutte e sette le subroutine degli esempi di ciclo For...Next.
Ciclo con argomenti frazionari
Gli attributi di inizio, fine e passaggio possono essere rappresentati da un numero, una variabile o un'espressione numerica:
Per i = da 1 a 20 Passo 2 Per i = a Per b Passo c Per i = a - 3 Per 2b + 1 Passo c/2
Come risultato del calcolo del valore di una variabile al di fuori del ciclo o di un'espressione al suo interno, è possibile ottenere un risultato frazionario. VBA Excel lo arrotonderà a un numero intero usando:
"Valori degli attributi prima dell'arrotondamento per i = da 1,5 a 10,5 Passaggio 2,51" Valori degli attributi arrotondati per i = da 2 a 10 Passaggio 3
Cerca di non consentire ai valori degli argomenti non arrotondati di entrare nel corpo del ciclo For...Next, in modo da non ottenere risultati imprevedibili della sua esecuzione. Se è necessario utilizzare numeri frazionari e si desidera utilizzare l'arrotondamento normale, utilizzare la funzione del foglio di lavoro WorksheetFunction.Round nel codice VBA per arrotondare un numero prima di utilizzarlo in un ciclo For...Next.
Ci sono situazioni in cui un programma VBA deve eseguire la stessa serie di azioni più volte di seguito (ovvero, ripetere più volte lo stesso blocco di codice). Questo può essere fatto usando i loop VBA.
Istruzione di ciclo "For" in Visual Basic
Struttura dell'istruzione del ciclo Per in Visual Basic può essere organizzato in due forme: come un ciclo Per il prossimo o come un ciclo Per ciascuno.
Il ciclo "Per... Avanti".
Ciclo Per il prossimo utilizza una variabile che prende in sequenza valori da un determinato intervallo. Ad ogni modifica del valore della variabile, vengono eseguite le azioni contenute nel corpo del ciclo. Questo è facile da capire da un semplice esempio:
Per i = da 1 a 10 Totale = Totale + iArray(i) Avanti i
In questo semplice ciclo Per il prossimo viene utilizzata la variabile io, che prende in sequenza i valori 1, 2, 3, ... 10, e per ciascuno di questi valori viene eseguito il codice VBA all'interno del ciclo. Pertanto, questo ciclo somma gli elementi dell'array iArray in una variabile Totale.
Nell'esempio sopra, il passo di incremento del ciclo non è specificato, quindi per incrementare la variabile io Incremento predefinito da 1 a 10 1 . Tuttavia, in alcuni casi è necessario utilizzare altri valori di incremento per il ciclo. Questo può essere fatto con la parola chiave fare un passo, come mostrato nel seguente semplice esempio.
Per d = da 0 a 10 Passaggio 0.1 dTotale = dTotale + d Successivo d
Poiché nell'esempio sopra, il passo di incremento è uguale a 0.1 , quindi la variabile dTotale per ogni iterazione del ciclo assume i valori 0.0, 0.1, 0.2, 0.3, ... 9.9, 10.0.
Puoi utilizzare un valore negativo per definire il passaggio del ciclo in VBA, in questo modo:
For i = 10 To 1 Step -1 iArray(i) = i Next i
Ecco l'incremento -1 , quindi la variabile io ad ogni iterazione del ciclo assume i valori 10, 9, 8, ... 1.
Per ogni ciclo
Ciclo Per ciascuno come un ciclo Per il prossimo, ma invece di scorrere la sequenza di valori per la variabile contatore, il ciclo Per ciascuno esegue una serie di azioni per ogni oggetto dal gruppo di oggetti specificato. Nell'esempio seguente, usando un ciclo Per ciascuno enumera tutti i fogli nella cartella di lavoro di Excel corrente:
Oscura wSheet come foglio di lavoro per ogni wSheet nei fogli di lavoro MsgBox "Foglio trovato: " & wSheet.Name Next wSheet
Dichiarazione di interruzione del ciclo "Esci per"
Operatore Esci per usato per interrompere il ciclo. Non appena questa istruzione viene incontrata nel codice, il programma termina l'esecuzione del ciclo e procede all'esecuzione delle istruzioni nel codice immediatamente dopo questo ciclo. Questo può essere utilizzato, ad esempio, per cercare un valore specifico in una matrice. Per fare ciò, ogni elemento dell'array viene visualizzato utilizzando un ciclo. Non appena viene trovato l'elemento richiesto, non è necessario esaminare il resto: il ciclo viene interrotto.
Applicazione dell'operatore Esci per dimostrato nell'esempio seguente. Qui il ciclo scorre attraverso 100 voci nell'array e confronta ciascuna con il valore della variabile dVal. Se viene trovata una corrispondenza, il ciclo si interrompe:
For i = 1 To 100 If dValues(i) = dVal Then IndexVal = i Exit For End If Next i
Ciclo continuo in Visual Basic
Ciclo Fare mentre esegue un blocco di codice finché non viene soddisfatta la condizione specificata. Quello che segue è un esempio di una procedura Sub, in cui con l'aiuto del ciclo Fare mentre I numeri di Fibonacci non superiori a 1000 vengono visualizzati in sequenza:
"La procedura Sub emette numeri di Fibonacci non superiori a 1000 Sub Fibonacci() Dim i As Integer "un contatore per indicare la posizione dell'elemento nella sequenza Dim iFib As Integer "memorizza il valore corrente della sequenza Dim iFib_Next As Integer "memorizza il valore successivo della sequenza Dim iStep As Integer "memorizza la dimensione dell'incremento successivo "inizializza le variabili i e iFib_Next i = 1 iFib_Next = 0 "Il ciclo Do While verrà eseguito finché il valore del "numero di Fibonacci corrente" non supera 1000 Do Mentre iFib_Next< 1000 If i = 1 Then "особый случай для первого элемента последовательности iStep = 1 iFib = 0 Else "сохраняем размер следующего приращения перед тем, как перезаписать "текущее значение последовательности iStep = iFib iFib = iFib_Next End If "выводим текущее число Фибоначчи в столбце A активного рабочего листа "в строке с индексом i Cells(i, 1).Value = iFib "вычисляем следующее число Фибоначчи и увеличиваем индекс позиции элемента на 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub
Nell'esempio fornito, la condizione iFib_Next< 1000 verificata all'inizio del ciclo. Pertanto, se il primo valore iFib_Next Se ce ne fossero più di 1000, il ciclo non verrebbe mai eseguito.
Un altro modo per implementare un ciclo Fare mentre- porre la condizione non all'inizio, ma alla fine del ciclo. In questo caso, il ciclo verrà eseguito almeno una volta, indipendentemente dal fatto che la condizione sia soddisfatta.
Schematicamente, un tale ciclo Fare mentre con la condizione da verificare alla fine sarà simile a questa:
Esegui... Ciclo mentre iFib_Next< 1000
Fai fino al ciclo in Visual Basic
Ciclo Fai fino a molto simile al ciclo Fare mentre: il blocco di codice nel corpo del ciclo viene eseguito più e più volte finché non viene soddisfatta la condizione specificata (il risultato dell'espressione condizionale è Vero). Nella procedura successiva Sub usando un ciclo Fai fino a recuperare i valori da tutte le celle in una colonna UN foglio di lavoro finché non c'è una cella vuota nella colonna:
IRow = 1 Do Until IsEmpty(Cells(iRow, 1)) "Il valore della cella corrente è memorizzato nell'array dCellValues dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop
Nell'esempio sopra, la condizione IsEmpty(Cells(iRow, 1)) situato all'inizio della struttura Fai fino a, quindi il ciclo verrà eseguito almeno una volta se la prima cella presa non è vuota.
Tuttavia, come mostrato negli esempi di loop Fare mentre, in alcune situazioni è necessario che il ciclo venga eseguito almeno una volta, indipendentemente dal risultato iniziale dell'espressione condizionale. In questo caso, l'espressione condizionale dovrebbe essere posta alla fine del ciclo, in questo modo:
Esegui ... Ciclo fino a quando non è vuoto(Cells(iRow, 1))
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.