Per il prossimo vba excel passa a quello successivo. Istruzioni in loop in VBA. Progetto "Reddito da Deposito"

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 utilizzando i loop VBA.

Istruzione For Loop in Visual Basic

Struttura delle istruzioni del ciclo Per in Visual Basic può essere organizzato in due forme: come un ciclo Per il prossimo o come un ciclo Per ciascuno.

Ciclo “Per...Avanti”

Ciclo Per il prossimo utilizza una variabile che assume sequenzialmente valori da un determinato intervallo. Ad ogni variazione 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) Successivo i

In questo semplice ciclo Per il prossimo viene utilizzata la variabile io, che assume in sequenza i valori 1, 2, 3, ... 10, e per ognuno di questi valori viene eseguito il codice VBA all'interno del loop. Pertanto, questo ciclo somma gli elementi dell'array iArray in una variabile Totale.

Nell'esempio precedente, il passo di incremento del ciclo non è specificato, quindi è necessario incrementare la variabile io Da 1 a 10 il valore predefinito è incremento 1 . Tuttavia in alcuni casi è necessario utilizzare valori di incremento diversi per il ciclo. Questo può essere fatto utilizzando la parola chiave Fare un passo, come mostrato nel seguente semplice esempio.

Per d = da 0 a 10 Passo 0,1 dTotal = dTotal + d Successivo d

Poiché nell'esempio precedente il passo di incremento è impostato su 0.1 , quindi la variabile dTotale per ogni ripetizione del ciclo assume i valori 0.0, 0.1, 0.2, 0.3, ... 9.9, 10.0.

Per determinare il passaggio del ciclo in VBA è possibile utilizzare ad esempio un valore negativo come questo:

Per i = da 10 a 1 passo -1 iArray(i) = i Successivo i

Ecco il passo di incremento -1 , quindi la variabile io ad ogni ripetizione del ciclo assume i valori 10, 9, 8, ... 1.

Per ogni ciclo

Ciclo Per ciascuno sembra un ciclo Per il prossimo, ma invece di scorrere la sequenza di valori per la variabile contatore Per ciascuno esegue una serie di azioni per ciascun oggetto in un gruppo di oggetti specificato. Nell'esempio seguente, utilizzando un loop Per ciascuno Elenca tutti i fogli nella cartella di lavoro di Excel corrente:

Dim wSheet come foglio di lavoro per ogni wSheet nei fogli di lavoro MsgBox "Foglio trovato: " & wSheet.Name Successivo wSheet

Esci per l'operatore di interruzione del ciclo

Operatore Esci per utilizzato per interrompere il ciclo. Non appena questa istruzione viene incontrata nel codice, il programma termina l'esecuzione del ciclo e procede con l'esecuzione delle istruzioni trovate nel codice immediatamente dopo questo ciclo. Questo può essere utilizzato, ad esempio, per cercare un valore specifico in un array. Per fare ciò, usa un ciclo per esaminare ogni elemento dell'array. Una volta trovato l'elemento richiesto, non è necessario esaminare il resto: il ciclo si interrompe.

Applicazione dell'operatore Esci per dimostrato nel seguente esempio. Qui il ciclo scorre 100 voci dell'array e le confronta ciascuna con il valore della variabile dVal. Se viene trovata una corrispondenza, il ciclo viene interrotto:

For i = da 1 a 100 Se dValues(i) = dVal Then IndexVal = i Exit For End If Next i

Esegui il ciclo While in Visual Basic

Ciclo Fare durante esegue un blocco di codice finché viene soddisfatta una determinata condizione. Di seguito è riportato un esempio della procedura Sub, in cui, utilizzando un loop Fare durante I numeri di Fibonacci non superiori a 1000 vengono visualizzati in sequenza:

"La procedura Sub stampa numeri di Fibonacci non superiori a 1000 Sub Fibonacci() Dim i As Integer "un contatore per indicare la posizione di un elemento nella sequenza Dim iFib As Integer "memorizza il valore corrente della sequenza Dim iFib_Next As Integer "memorizza i 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_Avanti< 1000 controllato ad inizio ciclo. Pertanto, se il primo valore iFib_Avanti Se fossero più di 1000, il ciclo non verrebbe eseguito nemmeno una volta.

Un altro modo per implementare un ciclo Fare durante– posizionare 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 vera.

Schematicamente un tale ciclo Fare durante con la condizione controllata alla fine apparirà così:

Esegui...Loop mentre iFib_Next< 1000

Esegui il ciclo Until in Visual Basic

Ciclo Fai fino a quando molto simile ad un ciclo Fare durante: Il blocco di codice nel corpo del ciclo viene eseguito più e più volte finché la condizione specificata non viene soddisfatta (il risultato dell'espressione condizionale è VERO). Nella procedura seguente Sub utilizzando un ciclo Fai fino a quando estrae i valori da tutte le celle in una colonna UN foglio di lavoro finché non viene rilevata 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 È vuoto(Celle(iRiga, 1)) situato all'inizio della struttura Fai fino a quando, quindi il ciclo verrà eseguito almeno una volta se la prima cella prelevata non è vuota.

Tuttavia, come è stato mostrato negli esempi di loop Fare durante, in alcune situazioni si desidera che il ciclo venga eseguito almeno una volta, indipendentemente dal risultato iniziale dell'espressione condizionale. In questo caso, l'espressione condizionale dovrebbe essere posizionata alla fine del ciclo, in questo modo:

Esegui ... Ciclo finché non è vuoto(Cells(iRow, 1))

Istruzioni in ciclo

Nel VBA Esistono due tipi principali di cicli: cicli con un contatore (parametrico) e cicli con una condizione (iterativo).

I cicli di conteggio vengono utilizzati nei casi in cui è necessario eseguire determinate azioni un certo numero di volte.

I cicli condizionali vengono utilizzati quando determinate azioni in un programma devono essere ripetute finché non viene soddisfatta una determinata condizione.

Loop con parametro Per il prossimo

Struttura del ciclo:

Per Parametro_ciclo = Valore_iniziale A Valore_finale

[Passaggio Passo]

Operatori

[Esci per]

Prossimo [Parametro_ciclo]

dove per parola chiave VBA (da), indicante l'inizio del ciclo;

variabile loop_parameter definita come contatore di loop;

Valore_iniziale un numero che specifica il valore iniziale del parametro del ciclo;

Alla parola chiave VBA (prima), dividendo

Valore_Iniziale e Conoscenza_Finale;

Final_Value un numero che specifica il valore del parametro del loop,

A cui il ciclo finisce;

Parola chiave passo VBA (passaggio) utilizzato per

Specifiche del passaggio del ciclo, argomento facoltativo;

Step un numero che specifica la fase del ciclo, ad es. il valore per cui

Aumenta (o diminuisce) il valore del parametro

Ciclo ad ogni passo. Questo numero potrebbe essere

Negativo;

Esci per operatore di uscita anticipata dal ciclo (facoltativo);

Prossimo parola chiave VBA (successivo) denota

Fine del ciclo.

Lavoro in ciclo:

Passaggio 1 Innanzitutto, viene determinato il parametro del ciclo e i valori iniziale e finale di questa variabile vengono calcolati e memorizzati.

Passaggio 2 Al parametro loop viene assegnato un valore iniziale.

Passaggio 3 Il valore iniziale del parametro del 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 loop, al parametro del loop viene assegnato il valore successivo. Vai al passaggio 3.

Nota.

1. Se viene utilizzata una parola chiave Fare un passo , il parametro del loop cambia in base al numero specificato dopo questa parola. Se la parola Fare un passo è assente, 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 interrotto anticipatamente al raggiungimento di una qualsiasi condizione. Per fare ciò, nel punto giusto del ciclo è necessario posizionare l'operatore Esci per.

Esempio 2.

Dim S come numero intero

Dim j come numero intero

S=2

Per j = da 1 a 10

S = S + j

Se S > 6 Allora

Esci per (Uscire dal ciclo se il valore S > 6)

Finisci se

Il prossimo j

MsgBox(S)

Cicli condizionali (iterativi)

Se alcune azioni (più azioni) devono essere eseguite molte volte, ma non si sa in anticipo quante volte e questo dipende da alcune condizioni, allora dovresti usare un ciclo con una precondizione o una postcondizione.

Nel VBA ci sono due cicli principali FARE...LOOP con una condizione inserita da una parola chiave Mentre e con la condizione immessa dalla parola chiave Fino a . Entrambi possono essere con precondizione o postcondizione.

Sintassi:

dove fare parola chiave (fare);

Mentre parola chiave (ancora);

Fino a parola chiave (fino a);

Ciclo continuo una parola chiave che indica la fine del ciclo;

<условие>un'espressione logica di cui viene verificata la verità

All'inizio di ogni esecuzione del corpo del loop;

<тело_цикла>sequenza arbitraria di operatori;

Fare...Durante la costruzione recita: fare mentre la condizione è soddisfatta. Nella progettazione Fare...mentre per

Il Do...Fino alla costruzione recita: fare finché la condizione non viene soddisfatta. Nella progettazione Fare...fino a quando Per aumentare il passo, dovresti scrivere un operatore speciale, perché in esso, a differenza del design Per , ciò non avviene automaticamente.

Condizione scritta dopo la parola chiave Fino a , viene controllato alla fine di ogni iterazione (dopo l'esecuzione del corpo del ciclo). Tieni presente che non funziona esattamente allo stesso modo del loop Mentre . Se la condizione è vera ( VERO ), quindi il ciclo termina. Se la condizione non è soddisfatta (è false Falso ), quindi il corpo del ciclo viene eseguito nuovamente.

Esempio 1.

Formulazione del problema. Calcolare la somma di una serie finita utilizzando una procedura di subroutine.

Tecnologia di esecuzione delle attività:

1. Dati iniziali: iZ

Risultato: S  R .

2.Digitare la seguente procedura personalizzata nel modulo di progetto standard utilizzando un ciclo con una precondizione Mentre:

Sommario secondario()

Dim S come numero intero

Dim i come numero intero

S=0

io = 1

Fai mentre io<= 10

S = S + i^2

io = io + 1

Ciclo continuo

MsgBox(S)

Fine sott

3.Digitare la seguente procedura personalizzata nel modulo di progetto standard utilizzando un ciclo con una precondizione Fino a:

Sommario secondario()

Dim S come numero intero

Dim i come numero intero

S=0

io = 1

Esegui fino a quando i > 10

S = S + i^2

io = io + 1

Ciclo continuo

MsgBox(S)

Fine sott

4 Digitare la seguente procedura personalizzata nel modulo di progetto standard utilizzando un ciclo con una postcondizione Mentre:

Sommario secondario()

Dim S come numero intero

Dim i come numero intero

S=0

io = 1

S = S + i^2

io = io + 1

Loop Mentre io<= 10

MsgBox(S)

Fine sott

5 Digitare la seguente procedura personalizzata nel modulo di progetto standard utilizzando un ciclo con una postcondizione Fino a:

Sommario secondario()

Dim S come numero intero

Dim i come numero intero

S=0

io = 1

S = S + i^2

io = io + 1

Ciclo fino a i > 10

MsgBox(S)

Fine sott

Potrebbe verificarsi una situazione in cui è necessario eseguire un blocco di codice più volte. In generale, le istruzioni vengono eseguite in sequenza: viene eseguita prima la prima istruzione di una funzione, poi la seconda, ecc.

I linguaggi di programmazione forniscono diverse strutture di controllo che consentono percorsi di esecuzione più complessi.

L'istruzione loop ci consente di eseguire più volte un'istruzione o un gruppo di istruzioni. Di seguito è riportata una vista generale di un'istruzione loop in VBA.

VBA fornisce i seguenti tipi di loop per gestire i requisiti di loop. Fare clic sui collegamenti seguenti per verificarne i dettagli.

per ciclo

Un ciclo for è una struttura di controllo della ripetizione che consente allo sviluppatore di scrivere in modo efficiente un ciclo che deve essere eseguito un certo numero di volte.

Sintassi

Di seguito è riportata la sintassi del ciclo for in VBA.

Per contatore = dall'inizio alla fine .... .... Successivo

Diagramma di flusso

Di seguito è riportato il flusso di controllo in modalità Loop:

  • Il primo passo è completato. Questo passaggio consente di inizializzare qualsiasi variabile di controllo del ciclo e incrementare la variabile del contatore dei passi.
  • In secondo luogo, viene valutata la condizione. Se vero, viene eseguito il corpo del ciclo. Se è falso, il corpo del ciclo non viene eseguito e il flusso di controllo passa 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 nuovamente. Se vero, il ciclo viene eseguito e il processo viene ripetuto (corpo del ciclo, quindi incremento del passo, quindi nuovamente condizione). Una volta 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 is: " & i Next End Sub

Quando il codice precedente viene compilato ed eseguito, produce il seguente output.

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 accorcia il codice che controlla la variabile del ciclo.

per... ciclo

Ogni ciclo viene utilizzato per eseguire un'istruzione o un gruppo di istruzioni su ciascun elemento in un array o raccolta.

For ogni ciclo è simile al ciclo For; tuttavia, il ciclo viene eseguito per ciascun elemento dell'array o del gruppo. Pertanto, il contapassi non esisterà in questo tipo di ciclo. Viene utilizzato principalmente con gli array o utilizzato nel contesto dell'oggetto file system lavorare in modo ricorsivo.

Sintassi

Di seguito è riportata la sintassi del ciclo For Each in VBA.

Per ogni elemento nel gruppo....Avanti

esempio

Private Sub Constant_demo_Click() "frutti è un array frutti = Array("mela", "arancia", "ciliegie") Dim nomifrutta come variante "iterando utilizzando For ogni ciclo. Per ogni articolo in frutta nomifrutta = nomifrutta & Articolo & Chr(10) Next MsgBox nomifrutta End Sub

Quando viene eseguito il codice sopra, stampa tutti i nomi dei frutti con un elemento su ogni riga.

mela
arancia
ciliegie

Viene eseguito se è presente almeno un elemento nel gruppo e viene ripetuto per ciascun elemento del gruppo.

mentre... esegui il loop

In un ciclo While While... Wend, se la condizione è True, tutte le istruzioni vengono eseguite finché non viene incontrata 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.

While condizione/i ... Wend

Diagramma di flusso

esempio

Private Sub Constant_demo_Click() Dim Contatore: Contatore = 10 While Contatore< 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 viene eseguito il codice precedente, verrà visualizzato quanto segue nel campo del messaggio.

Il valore corrente del contatore è: 11
Il valore corrente del contatore è: 12
Il valore corrente del contatore è: 13
Il valore corrente del contatore è: 14
Il valore corrente del contatore è: 15

Questo controlla la condizione prima di eseguire il corpo del loop.

fai...il ciclo while

Un ciclo Do... while viene utilizzato quando vogliamo ripetere una serie di istruzioni mentre una condizione è vera. La condizione può essere verificata all'inizio o alla fine del ciclo.

Sintassi

Di seguito è riportata la sintassi del ciclo Do...While in VBA.

Condizione Do While......Loop

Diagramma di flusso

esempio

L'esempio seguente utilizza un ciclo Do... while per verificare 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

Esiste anche una sintassi alternativa per il ciclo Do... while che controlla lo stato alla fine del ciclo. La differenza principale tra queste due sintassi è spiegata nell'esempio seguente.

Esegui... ... Condizione Loop While

esempio

L'esempio seguente utilizza un ciclo Do... while per verificare lo stato alla fine del ciclo. Le istruzioni all'interno di un 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 viene eseguito il codice precedente, stampa il seguente output in una finestra di messaggio.

Il valore di i è: 11

Le istruzioni do..While verranno eseguite finché la condizione è vera. (Cioè) Il ciclo deve essere ripetuto finché la condizione non diventa False.

fare...intil loop

Un ciclo do... intil non verrà utilizzato quando vogliamo ripetere una serie di istruzioni mentre la condizione è falsa. La condizione può essere verificata all'inizio o alla fine del ciclo.

Sintassi

Di seguito è riportata la sintassi del ciclo Do..Until in VBA.

Esegui la condizione Fino a ... ... 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 è False. Quindi il loop verrà eseguito i = i + 1 msgbox ("Il valore di i è: " & i) Loop End Sub

Quando viene eseguito il codice precedente, 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 differenza principale tra queste due sintassi è spiegata dal seguente esempio.

Esegui... ... Ciclo fino alla condizione

Diagramma di flusso

esempio

L'esempio seguente utilizza Do...Before un ciclo per testare una condizione alla fine del ciclo. Le istruzioni all'interno di un ciclo vengono eseguite almeno una volta, anche se la condizione è True.

Private Sub Constant_demo_Click() i = 10 Do i = i + 1 msgbox "Il valore di i è: " & i Loop Until i more15 "La condizione è True. Quindi il loop viene eseguito una volta. End Sub

Quando viene eseguito il codice precedente, stampa il seguente output in una finestra di messaggio.

Il valore di i è: 11

Le istruzioni do..Until verranno eseguite finché 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 del ciclo non vengono eseguite.

Dichiarazione e descrizione del controllo

Uscita dell'operatore

Exit for viene utilizzato quando vogliamo uscire dal Ciclo For in base a determinati criteri. Quando viene eseguito Exit For, il controllo passa all'istruzione successiva immediatamente dopo il Ciclo For.

Sintassi

Di seguito è riportata la sintassi Exit For Statement in VBA.

Diagramma di flusso

esempio

L'esempio seguente utilizza Exit For. Se il contatore 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 "Uscire quando i=4 End If Next End Sub

Quando viene eseguito il codice precedente, 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 un'istruzione del ciclo For e trasferisce l'esecuzione all'istruzione immediatamente dopo il ciclo

Esci da Fai

L'istruzione Exit Do viene utilizzata quando vogliamo uscire dai Do Loops in base a determinati criteri. Può essere utilizzato in entrambi i cicli Do Do...While e Do...Before.

Quando viene eseguito Exit Do, il controllo passa all'istruzione successiva immediatamente dopo il Do Loop.

Sintassi

Di seguito è riportata la sintassi dell'istruzione Exit Do in VBA.

esempio

L'esempio seguente utilizza Exit Do. Se il contatore raggiunge 10, la linea di output Do termina e il controllo passa all'istruzione successiva immediatamente dopo il Ciclo For.

Private Sub Constant_demo_Click() i = 0 Do While i<= 100 If i >10 Then Exit Do " Il ciclo esce se i>10 End If MsgBox ("Il valore di i è: " & i) i = i + 2 Loop End Sub

Quando viene eseguito il codice precedente, 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

Completa un'istruzione Do While e trasferisce l'esecuzione all'istruzione immediatamente dopo il ciclo

Attività di laboratorio sui fondamenti della programmazione

2.1. Tabulazione delle funzioni rappresentate analiticamente
e convergenti nelle vicinanze

Obiettivo del lavoro

· Consolidamento delle conoscenze teoriche sui fondamenti dell'organizzazione delle strutture ramificate e cicliche.

· Acquisizione di competenze pratiche di programmazione utilizzando strutture ramificate e cicliche nel sistema Visual Basic.

Esistono tre tipi di istruzioni di loop in VB:

ciclo di conteggio: Per...A...Successivo

cicli con precondizioni: Do While...Loop, Do Until...Loop, While...WEnd

· cicli con postcondizioni: Do...Loop While, Do...Loop Until.

Ciclo di conteggio: consente di scorrere una serie di istruzioni un numero specificato di volte. La sua sintassi è la seguente:

Per contatore = Inizio A FINE

[operatori]

[operatori]

Prossimo [ contatore]

Parametro contatoreè una variabile numerica (intero, di tipo reale o di tipo Data, Variante, Valuta) che viene incrementata automaticamente dopo ogni ripetizione. Valore iniziale contatore uguale al parametro Inizio, e il parametro finale - FINE. Se non specificato il passo viene considerato uguale a 1; il valore del passo può essere modificato. Può essere un numero positivo o negativo.

Esistono quattro costrutti sintattici del ciclo Do....:

Le istruzioni tra le parole chiave Do... Loop vengono eseguite un numero specificato di volte a seconda della condizione. Ad esempio, nel frammento di programma seguente, quando C = 100, la condizione sarà soddisfatta e verrà avviato il ciclo. All'interno del ciclo viene richiamata la procedura e il valore di C viene diminuito di 1. Successivamente viene verificata nuovamente la condizione (C > 0) e vengono eseguiti nuovamente gli operatori del ciclo (verranno eseguiti 100 volte in totale), finché C = 0. Quando la condizione C > 0 diventa falsa e il ciclo si interrompe.

Esegui mentre C > 0

Lo stesso frammento di programma eseguito utilizzando un ciclo con una precondizione nella sintassi 2:

In questo caso il ciclo funziona finché la condizione è False, a differenza del caso precedente, cioè continua Prima realizzazione della condizione C = 0.

Le istruzioni del ciclo 3 e 4 sono molto simili nella sintassi alle prime due, tranne che per la condizione Non viene calcolato finché il ciclo non viene eseguito almeno una volta.

Queste sintassi del ciclo possono utilizzare le istruzioni di uscita del ciclo incondizionato Exit For ed Exit Do per trasferire il controllo all'operatore dietro il ciclo. Ad esempio, nel frammento di programma seguente, se il valore iniziale di C è >50, il ciclo si interromperà immediatamente.



Fare fino a C<= 0

MsgBox “Inizia” il valore è maggiore di quello accettabile", "Errore di input"

Il ciclo While...Wend veniva utilizzato nelle prime versioni di Visual Basic. La sua sintassi è la seguente:

Mentre<условие>

<Операторы>

A differenza del ciclo Do..Loop, il ciclo While..Wend non dispone di una seconda opzione in cui la condizione viene verificata alla fine del ciclo. Inoltre, non esiste alcuna istruzione di uscita del ciclo, come Exit Do.

VBA. Organizzazione dei cicli.

Le istruzioni di loop vengono utilizzate per ripetere un'azione o un gruppo di azioni un numero specificato di volte. Il numero di ripetizioni (iterazioni del ciclo) può essere predeterminato o calcolato.

VBA supporta due tipi di costrutti di loop:

  1. Loop con un numero fisso di ripetizioni ( cicli contrastati).
  2. Cicli con un numero indefinito di ripetizioni ( cicli condizionali).

Per tutti i tipi di cicli viene utilizzato il concetto corpo del ciclo , che definisce un blocco di istruzioni racchiuso tra le istruzioni di inizio e fine del ciclo. Viene chiamata ogni ripetizione dell'esecuzione delle istruzioni del corpo del ciclo iterazione

Cicli fissi

VBA mette a disposizione due strutture di controllo per l'organizzazione di un ciclo fisso: For... Next (ciclo con un contatore) e For Each... Next (ciclo con un'enumerazione).

Operatore Per...Avanti Questo è un tipico ciclo di contatore che esegue un numero specificato di iterazioni. La sintassi dell'istruzione For...Next è:

Per<счетчик> = <начЗначение>Quello<конЗначение>

<блок операторов>

Prossimo [<счетчик>]

Un esempio di utilizzo dell'operatore For...Next.

Listato 1. For... Operatore successivo

‘ COMPITO: creare un programma che riceva due numeri dall'utente.

' Somma tutti i numeri nell'intervallo specificato da questi due numeri, quindi

‘ visualizza l’importo risultante.

Sottocampione7()

Dim i As Integer ‘contatore cicli

Dim sStart 'valore iniziale del contatore

Dim sEnd 'fine valore contatore

Dim sSum As Long 'somma risultante

sStart = InputBox("Inserisci il primo numero:")

sEnd = InputBox("Inserisci il secondo numero:")

somma = 0

Per i = CInt(sStart) A CInt(sEnd)

Somma s = Somma s + i

Successivamente io

MsgBox “La somma dei numeri da “ & sStart & ” a “ & sEnd & ” è: “ & sSum

Fine sott

Dichiarazione di ciclo For Each...Nextappartiene alla categoria degli operatori di tipo oggetto, ad es. si applica principalmente alle collezioni oggetti e anche array . Il corpo del ciclo viene eseguito un numero fisso di volte, corrispondente al numero di elementi nell'array o nella raccolta. Formato dell'istruzione For Each...Next:

Per ciascuno<элемент>In<группа> <блок операторов>Prossimo [<элемент>]

Loop condizionali (loop non definiti)

I cicli condizionali vengono utilizzati quando è necessario eseguire azioni ripetute solo in determinate condizioni. Il numero di iterazioni non è definito e in generale può essere uguale a zero (in particolare per i cicli con una precondizione). VBA offre agli sviluppatori diverse strutture di controllo per l'organizzazione dei cicli condizionali:

  • Quattro tipi di Do..Loops, che differiscono per il tipo di condizione da controllare e per il tempo necessario per completare questo controllo.
  • Ciclo continuo While... Wend.

Il ciclo Do While... è tipico ciclo con precondizione. La condizione viene verificata prima dell'esecuzione del corpo del ciclo. Il ciclo continua il suo lavoro fino a quando non<условие>viene eseguito (cioè ha il valore True). Poiché il controllo viene eseguito all'inizio, il corpo del ciclo potrebbe non essere mai eseguito. Fai mentre... Formato del loop:

Fare durante<условие>

<блок операторов>

Ciclo continuo

Listato 2. Fai mentre... Ciclo

‘ COMPITO: creare un programma che richieda l'input dell'utente

«una sequenza arbitraria di numeri. L'ingresso deve essere terminato

‘ solo dopo che la somma dei numeri dispari inseriti supera 100.

Sottocampione8()

Dim OddSum As Integer 'somma dei numeri dispari

Dim OddStr As String 'una stringa con numeri dispari

Dim Num ‘per accettare i numeri inseriti

OddStr = "" 'inizializzazione della stringa di output

OddSum = 0 'inizializza OddSum

Fai mentre OddSum< 100 ‘начало цикла

Num = InputBox("Inserisci un numero: ")

Se (Num Mod 2)<>0 Quindi "controllo di parità".

OddSum = OddSum + Num 'accumulo della somma dei numeri dispari

Stradispari = Stradispari & Num & ” ”

Finisci se

Ciclo continuo

'stampa una stringa con numeri dispari

MsgBox prompt:="Numeri dispari: " & OddStr

Fine sott

Istruzione Do...Loop Whileprogettato per l'organizzazioneciclo con postcondizione. La condizione viene verificata dopo che il corpo del ciclo è stato eseguito almeno una volta. Il ciclo continua il suo lavoro fino a quando<условие>rimane vero. Esegui... Ripeti mentre formatta:

Fare<блок операторов>Ripeti mentre<условие>

Listato 3. Ciclo con postcondizione

‘ COMPITO: Creare un programma per il gioco “Indovina il numero”. Il programma deve essere casuale

‘ modo per generare un numero compreso tra 1 e 1000, l’utente deve

‘indovina questo numero. Il programma visualizza un suggerimento per ogni numero inserito

' "più o meno".

Sottocampione8()

Randomize Timer 'inizializza il generatore di numeri casuali

Dim msg As String ‘ stringa del messaggio

Dim SecretNumber come lungo, UserNumber come variante

Inizio: NumeroSegreto = Round(Rnd * 1000) ‘ numero generato dal computer

UserNumber = Vuoto ‘ numero inserito dall'utente

Fai il gioco

Seleziona Caso Vero

Case IsEmpty(UserNumber): msg = "Inserisci un numero"

Numero utente caso > Numero segreto: msg = "Troppi!"

Numero utente caso< SecretNumber: msg = “Слишком мало!”

Fine Seleziona

NumeroUtente = InputBox(prompt:=msg, Titolo:="Indovina il numero")

Ciclo mentre UserNumber<>Numero segreto

' visita medica

Se MsgBox("Gioca ancora?", vbYesNo + vbQuestion, "Hai indovinato!") = vbYes Allora

Vai a iniziare

Finisci se

Fine sott

Cicli Esegui fino a... Esegui ciclo e Do... Esegui ciclo fino a sono inversioni dei cicli condizionali precedentemente discussi. In generale funzionano in modo simile, tranne per il fatto che il corpo del ciclo viene eseguito se la condizione è falsa (cioè<условие>= Falso). Esegui fino a... Formato loop:

Fai fino a quando<условие> <блок операторов>Ciclo continuo

Esegui... Ciclo fino al formato del ciclo:

<блок операторов>

Ciclo fino a<условие>

Compito pratico:Riscrivi i programmi nei Listati 10 e 11 utilizzando istruzioni a ciclo invertito.

Ripeti mentre... Mercoledì si applica anche ai cicli condizionali. Questo operatoreè pienamente coerente con la struttura Do While... Loop. Mentre... Formato del ciclo Wend:

Mentre<условие>

<блок операторов>

Wend

Una caratteristica distintiva di questo operatore è l'impossibilità licenziamento forzato(interrompendo) il corpo del ciclo (l'operatore Exit Do non funziona nel ciclo While... Wend).

Interrompere un ciclo

Per terminare anticipatamente un'iterazione e uscire dal ciclo, viene utilizzata l'istruzione Exit. Questo operatore è applicabile a qualsiasi struttura ciclica tranne While... Wend. La sintassi generale per utilizzare Exit per interrompere un ciclo è:

<начало_цикла>

[<блок операторов1>]

Esci (Per | Fai)

[<блок операторов2>]

<конец_цикла>

Quando viene eseguita l'istruzione Exit, il ciclo viene interrotto e il controllo viene trasferito all'istruzione successiva<конец_цикла>. Potrebbero esserci diverse istruzioni Exit nel corpo di un ciclo.

Listato 4. Forza l'uscita dal ciclo

Sottocampione9()

Per i = da 1 a 1.0000.000

Se i = 10 Allora Exit For ‘ esce dal ciclo quando il contatore raggiunge 10

Prossimo




Superiore