VBA per Loop, Utilizzo dei cicli in VBA in Microsoft Excel
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:
-
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.
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.
{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.
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.
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.
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.
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]