LA CAMPANA

C'è chi ha letto questa notizia prima di te.
Iscriviti per ricevere gli ultimi articoli.
E-mail
Nome
Cognome
Come vorresti leggere La campana
Niente spam

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 cicloPerProssimo 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.

LA CAMPANA

C'è chi ha letto questa notizia prima di te.
Iscriviti per ricevere gli ultimi articoli.
E-mail
Nome
Cognome
Come vorresti leggere La campana
Niente spam