In questo articolo, abbiamo trattato diversi tipi di loop utilizzati in VBA e come usarli per eseguire la stessa attività in modi diversi.
Perché i loop?
Il looping è una delle tecniche di programmazione più potenti utilizzate in molti linguaggi di programmazione. Il ciclo viene utilizzato per ripetere un blocco di codice per il numero richiesto di volte o fino a quando una determinata condizione non viene valutata vera o viene raggiunto un valore specifico, dopodiché viene eseguito il blocco di codice successivo.
Lo scopo di un ciclo VBA di Excel è fare in modo che Excel ripeta un pezzo di codice un certo numero di volte. Si può specificare quante volte un codice deve essere ripetuto come numero fisso (es. fallo 10 volte), o come variabile (es. fallo tante volte quante sono le righe di dati).
I loop Excel possono essere costruiti in modi diversi per adattarsi a circostanze diverse. Spesso è possibile ottenere gli stessi risultati in modi diversi per soddisfare le proprie preferenze personali.
Ci sono tre diversi tipi di loop disponibili in Excel VBA, che sono:
1. FARE FINO A CICLO
2. FARE MENTRE Loop
3. Ciclo FOR
1. FARE FINO A CICLO
Il ciclo DO UNTIL viene utilizzato per ripetere un blocco di codice indefinitamente, fino a quando la condizione specificata non viene impostata su True. La condizione può essere verificata all'inizio o alla fine del Loop. L'istruzione DO UNTIL… LOOP verifica la condizione all'inizio, mentre l'istruzione DO… LOOP UNTIL verifica la condizione alla fine del ciclo.
Sintassi dell'istruzione DO UNTIL… LOOP
Fai fino a [Condizione]
[Blocco di codice da ripetere]
Ciclo continuo
Sintassi dell'istruzione DO… LOOP UNTIL
Fare
[Blocco di codice da ripetere]
Ciclo fino a [Condizione]
Abbiamo spiegato il ciclo DO… UNTIL con un esempio. Le macro Loop1 e Loop2 vengono utilizzate per calcolare la media dei numeri nella colonna A e nella colonna B utilizzando il ciclo DO… UNTIL.
I dati di esempio sono presenti nell'intervallo A15:B27. La colonna A contiene i punteggi del Round 1 e la colonna B contiene i punteggi del Round 2. Vogliamo calcolare le medie dei punteggi del Round 1 e del Round 2 nella colonna C.
Nella macro Loop1, abbiamo usato "FormulaR1C1" per inserire la formula media nella cella attiva. L'istruzione condizionale nel ciclo DO UNTIL viene verificata alla fine del ciclo.
Nella macro Loop2, abbiamo utilizzato "WorksheetFunction.Average" per inserire il valore medio nella cella attiva. Anche in questa macro, l'istruzione di condizione viene verificata alla fine del ciclo.
L'unica differenza tra le macro Loop1 e Loop2 è che Loop1 inserisce la formula della media, mentre Loop2 calcola la media e poi inserisce il valore medio nella cella attiva.
2. FARE MENTRE Loop
Il ciclo DO WHILE viene utilizzato per ripetere un blocco di codice un numero indefinito di volte, mentre la condizione specificata continua ad essere True e si interrompe quando la condizione restituisce False. La condizione può essere verificata all'inizio o alla fine del Loop. L'istruzione DO WHILE… LOOP verifica la condizione all'inizio, mentre l'istruzione DO… LOOP WHILE verifica la condizione alla fine del ciclo. L'istruzione DO… LOOP WHILE viene utilizzata quando si desidera che il ciclo esegua il blocco di codice almeno una volta prima di verificare la condizione.
Sintassi dell'istruzione DO WHILE… LOOP
Fai mentre [Condizione]
[Blocco di codice da ripetere]
Ciclo continuo
Sintassi dell'istruzione DO… LOOP WHILE
Fare
[Blocco di codice da ripetere]
Ciclo mentre [Condizione]
In questo esempio, le macro Loop3 e Loop4 vengono utilizzate per calcolare le medie per i valori nelle celle della colonna A e della colonna B. Entrambe le macro funzionano sugli stessi dati di esempio utilizzati dalle macro Loop1 e Loop2. Entrambi usano l'istruzione DO WHILE per scorrere l'intervallo che contiene i dati.
L'unica differenza tra le macro Loop3 e Loop4 è che sono modi diversi di rappresentare le condizioni del ciclo DO WHILE.
Poiché le macro Loop3 e Loop4 utilizzano gli stessi dati di input e svolgono anche le stesse funzioni della macro Loop1, in modo che anche l'output restituito sia lo stesso della macro Loop1.
3. Ciclo FOR
Il ciclo For viene utilizzato per ripetere un blocco di codice per un numero specifico di volte.
Sintassi del ciclo FOR
Per count_variable = start_value To end_value
[blocco di codice]
Variabile_conta successiva
La macro Loop5 mostra come utilizzare il ciclo FOR per calcolare la media. Utilizza anche gli stessi dati di esempio utilizzati da altre macro. Abbiamo usato 15 come valore di partenza poiché i dati del campione iniziano dal 15ns riga. Abbiamo usato Range("A" & Cells.Rows.Count).End(xlUp).Row per trovare l'ultima riga contenente i dati. Il ciclo FOR si ripeterà (lastcell-15) il numero di volte.
L'output restituito dopo l'esecuzione della macro Loop5 è lo stesso della macro Loop1.
La macro Loop6 viene creata per calcolare la media, solo se la cella attiva che avrà la funzione media è vuota prima di eseguire la macro.
I dati di esempio per questa macro sono presenti nell'intervallo da E15 a G27.
Abbiamo usato DO… LOOP WHILE per scorrere l'intervallo definito. L'istruzione IF viene utilizzata per verificare se la cella in cui verrà inserita la funzione contiene un valore. Questa macro inserirà la funzione media nella cella solo se è vuota.
La macro Loop7 viene utilizzata anche per calcolare la media. Controlla i valori nella colonna helper prima di valutare se ripetere il ciclo. Controlla anche se il riferimento di cella da utilizzare nella funzione media è vuoto.
I dati di esempio utilizzati per la macro Loop7 sono compresi nell'intervallo J15:M27.
La colonna M viene utilizzata come colonna di supporto. Questa macro inserirà una funzione media solo se una cella nella colonna M non è vuota. Questa macro verifica che una cella debba essere vuota prima di inserirvi una funzione media. Non inserirà una funzione media se la cella a cui si fa riferimento nella funzione media è vuota.
Si prega di seguire sotto per il codice
Option Explicit Sub Loop1() 'Calcolo della media 'Il ciclo Esegui fino a quando la cella nella colonna precedente della cella attiva è vuota Intervallo ("C15"). Seleziona Esegui 'Assegna la funzione media sul valore nelle celle delle due colonne precedenti ActiveCell. FormulaR1C1 = "=Average(RC[-1],RC[-2])" 'Sposta nella cella della riga successiva ActiveCell.Offset(1, 0).Seleziona 'Verifica se il valore nella cella della colonna precedente è vuoto 'Esegui fino a loop eseguirà un ciclo finché l'istruzione della condizione non restituisce True Loop Until IsEmpty(ActiveCell.Offset(0, -1)) Range("A15").Select End Sub Loop2() 'Calcolo della media' Il ciclo Do Until eseguirà un ciclo fino alla cella nella precedente la colonna della cella attiva è vuota 'Questa macro è simile alla macro Loop1, l'unico modo per calcolare la media è diverso Range("C15").Seleziona Do 'La funzione Worsheet.Average viene utilizzata per calcolare la media ActiveCell.Value = WorksheetFunction.Average( ActiveCell.Offset(0, -1).Value, _ ActiveCell.Offset(0, -2).Value) ActiveCell.Offset(1, 0).Seleziona ciclo fino a IsEmpty(ActiveCel l.Offset(0, -1)) Range("A15").Select End Sub Sub Loop3() 'Calcolo della media 'Do While loop verrà eseguito fino a quando la cella nella colonna precedente della cella attiva è vuota Range("C15") .Seleziona 'Verifica se il valore nella cella della colonna precedente è vuoto 'Do While loop eseguirà un ciclo finché l'istruzione della condizione non sarà True Do While IsEmpty(ActiveCell.Offset(0, -1)) = False 'Assegnazione della funzione media sul valore nelle celle del precedente due colonne consecutive ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])" 'Spostamento nella cella della riga successiva ActiveCell.Offset(1, 0).Select Loop Range("A15").Select End Sub Sub Loop4() 'Calcolo della media 'Do While loop verrà eseguito fino a quando la cella nella colonna precedente della cella attiva è vuota 'Questa macro è simile alla macro Loop3, l'unico modo per applicare la condizione è diverso Range("C15").Select Do While Not IsEmpty(ActiveCell.Offset(0, -1)) ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])" ActiveCell.Offset(1, 0).Select Loop Range(" A15"). Seleziona End Sub Sub Loop5() 'PER ripetizioni del ciclo per un numero fisso er di volte determinato dal numero di righe Dim i, lastcell As Long 'Trovare l'ultima riga contenente i dati nella colonna A lastcell = Range("A" & Cells.Rows.Count).End(xlUp).Row Range("C15 ").Seleziona 'i alla variabile viene assegnato il valore 15 poiché i nostri dati di esempio iniziano dalla 15a riga 'FOR Loop eseguirà un ciclo x For i = 15 To lastcell ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2 ])" ActiveCell.Offset(1, 0).Seleziona Next i Range("A15").Select End Sub Sub Loop6() 'Calcolo della media 'Il ciclo Esegui fino a quando la cella nella colonna precedente della cella attiva non è vuota' Non calcola una media se c'è già qualcosa nell'intervallo di celle ("G15").Seleziona Do If IsEmpty(ActiveCell) Then ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])" End If ActiveCell.Offset(1, 0).Select Loop Until IsEmpty(ActiveCell.Offset(0, -1)) Range("E15").Select End Sub Sub Loop7() 'Do fino a quando il ciclo viene eseguito finché c'è qualcosa nella cella nella colonna successiva "Non calcola una media se c'è già qualcosa nel c attivo" ell 'Né se non ci sono dati nelle celle che vengono utilizzate all'interno della funzione media (per evitare errori #DIV/0). 'Calcolo dell'intervallo medio ("L15"). Selezionare Do If IsEmpty(ActiveCell) Then If IsEmpty(ActiveCell.Offset(0, -1)) And IsEmpty(ActiveCell.Offset(0, -2)) Then ActiveCell.Value = " " Else ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])" End If End If ActiveCell.Offset(1, 0).Seleziona Loop fino a IsEmpty(ActiveCell.Offset(0, 1)) Intervallo("J15").Seleziona End Sub
Se ti è piaciuto questo blog, condividilo con i tuoi amici su Facebook. Inoltre, puoi seguirci su Twitter e Facebook.
Ci piacerebbe avere tue notizie, facci sapere come possiamo migliorare il nostro lavoro e renderlo migliore per te. Scrivici al sito di posta elettronica