In questo articolo, abbiamo coperto diversi tipi di loop utilizzati in VBA e come utilizzarli 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 looping viene utilizzato per ripetere un blocco di codice per il numero di volte richiesto o fino a quando una data condizione non diventa 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 un numero fisso (es. Fallo 10 volte) o come una variabile (es. Fallo tante volte quante sono le righe di dati).

I loop di Excel possono essere costruiti in modi diversi per adattarsi a circostanze diverse. Spesso è possibile ottenere gli stessi risultati in modi diversi a seconda delle preferenze personali.

Ci sono tre diversi tipi di loop disponibili in Excel VBA, che sono:

  1. DO UNTIL Loop 2. DO WHILE Loop 3. FOR Loop {vuoto} 1. Ciclo DO UNTIL Il ciclo DO UNTIL viene utilizzato per ripetere un blocco di codice indefinitamente, finché 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]

{vuoto} [Blocco di codice da ripetere]

Loop

Sintassi dell’istruzione DO… LOOP UNTIL

Fai {vuoto} [Blocco di codice da ripetere]

Loop 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 del campione 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.

Sample1

Nella macro Loop1, abbiamo utilizzato “FormulaR1C1” per inserire la formula media nella cella attiva. L’istruzione della condizione nel ciclo DO UNTIL viene controllata 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 della condizione viene controllata alla fine del ciclo.

L’unica differenza tra la macro Loop1 e Loop2 è che Loop1 inserisce la formula media, mentre Loop2 calcola la media e quindi inserisce il valore medio nella cella attiva.

OutputSample1

{vuoto} 2. Ciclo DO WHILE 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 ritorna False. La condizione può essere verificata all’inizio o alla fine del ciclo. 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]

{vuoto} [Blocco di codice da ripetere]

Loop

Sintassi dell’istruzione DO… LOOP WHILE

Fai {vuoto} [Blocco di codice da ripetere]

Loop While [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 campione 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 sarà lo stesso della macro Loop1.

{vuoto} 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 {vuoto} [blocco di codice]

La successiva macro count_variable Loop5 mostra come utilizzare il ciclo FOR per calcolare la media. Utilizza anche gli stessi dati di esempio utilizzati da altre macro. Abbiamo utilizzato 15 come valore iniziale poiché i dati di esempio iniziano dalla 15 ^ a ^ riga. Abbiamo utilizzato Range (“A” & Cells.Rows.Count) .End (xlUp) .Row per trovare l’ultima riga contenente i dati. Il ciclo FOR si ripeterà (lastcell- 15) un numero di volte.

L’output restituito dopo l’esecuzione della macro Loop5 è uguale a quello 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.

Sample2

Abbiamo utilizzato 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.

OutputSample2

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 nell’intervallo J15: M27.

Sample3

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 controlla che una cella debba essere vuota prima di inserirvi una funzione media. Non inserirà una funzione media se la cella a cui fa riferimento la funzione media è vuota.

OutputSample3

Segui sotto per il codice

Option Explicit

Sub Loop1()

'Calculating average

'Do Until loop will loop until cell in the previous column of active cell is empty

Range("C15").Select

Do

'Assigning average function on value in cells of previous two consecutive columns

ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])"

'Moving to cell in next row

ActiveCell.Offset(1, 0).Select

'Checking whether value in cell of previous column is empty

'Do Until loop will loop until condition statement returns True

Loop Until IsEmpty(ActiveCell.Offset(0, -1))

Range("A15").Select

End Sub

Sub Loop2()

'Calculating average

'Do Until loop will loop until cell in the previous column of active cell is empty

'This macro is similar to macro Loop1, only way of calculating average is different

Range("C15").Select

Do

'Worsheet.Average function is used for calculating the average

ActiveCell.Value = WorksheetFunction.Average(ActiveCell.Offset(0, -1).Value, _

ActiveCell.Offset(0, -2).Value)

ActiveCell.Offset(1, 0).Select

Loop Until IsEmpty(ActiveCell.Offset(0, -1))

Range("A15").Select

End Sub

Sub Loop3()

'Calculating average

'Do While loop will run until cell in the previous column of active cell is empty

Range("C15").Select

'Checking whether value in cell of previous column is empty

'Do While loop will loop until condition statement is True

Do While IsEmpty(ActiveCell.Offset(0, -1)) = False

'Assigning average function on value in cells of previous two consecutive column

ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])"

'Moving to cell in next row

ActiveCell.Offset(1, 0).Select

Loop

Range("A15").Select

End Sub

Sub Loop4()

'Calculating average

'Do While loop will run until cell in the previous column of active cell is empty

'This macro is similar to macro Loop3, only way of applying condition is different

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").Select

End Sub

Sub Loop5()

'FOR loop repeats for a fixed number of times determined by the number of rows

Dim i, lastcell As Long

'Finding the last row containing data in column A

lastcell = Range("A" & Cells.Rows.Count).End(xlUp).Row

Range("C15").Select

'i variable is assigned value of 15 as our sample data begin from 15th row

'FOR Loop will loop x

For i = 15 To lastcell

ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])"

ActiveCell.Offset(1, 0).Select

Next i

Range("A15").Select

End Sub

Sub Loop6()

'Calculating average

'Do Until loop will loop until cell in the previous column of active cell is empty

'It does not calculate an average if there is already something in the cell

Range("G15").Select

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 Until loop runs as long as there is something in cell in next column

'It does not calculate an average if there is already something in the active cell

'Nor if there is no data in cells which are used within average function (to avoid #DIV/0 errors).

'Calculating average

Range("L15").Select

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).Select

Loop Until IsEmpty(ActiveCell.Offset(0, 1))

Range("J15").Select

End Sub

Se ti è piaciuto questo blog, condividilo con i tuoi amici su Facebook e Facebook.

Ci piacerebbe sentire la tua opinione, facci sapere come possiamo migliorare il nostro lavoro e renderlo migliore per te. Scrivici a [email protected]