Sommario:
Video: Excel VBA IF THEN Statement (with ELSEIF & Looping in cells) 2025
If-Then è la struttura di controllo più importante di VBA. Probabilmente utilizzerai questo comando ogni giorno. Utilizzare la struttura If-Then quando si desidera eseguire una o più istruzioni in modo condizionale. La clausola opzionale Else, se inclusa, consente di eseguire una o più istruzioni se la condizione che stai testando è non true. Ecco una semplice procedura di CheckUser, ricodificata per utilizzare la struttura If-Then-Else:
Sub CheckUser2 () UserName = InputBox ("Inserisci il tuo nome:") Se UserName = "Satya Nadella" Then MsgBox ("Welcome Satya …") '… [Altro codice qui] … Else MsgBox "Scusate. Solo Satya Nadella può gestirlo. "End If End Sub
If-Then examples
La seguente routine mostra la struttura If-Then senza la clausola Else facoltativa:
Sub GreetMe () If Time <0. 5 then MsgBox" Good Morning "End Sub
La procedura GreetMe utilizza la funzione Time di VBA per ottenere l'ora del sistema. Se l'ora corrente è inferiore a. 5, la routine mostra un saluto amichevole. Se il tempo è maggiore o uguale a 5, la routine finisce e non succede nulla.
Per visualizzare un saluto diverso se il tempo è maggiore o uguale a. 5, è possibile aggiungere un'altra istruzione If-Then dopo la prima:
Sub GreetMe2 () If Time = 0. 5 Then MsgBox "Good Afternoon" End Sub
Si noti che> = (maggiore o uguale a) è usato per la seconda istruzione If-Then. Questo assicura che l'intera giornata sia coperta. Se> (maggiore di) era stato usato, non appariva alcun messaggio se questa procedura fosse stata eseguita esattamente alle 12.00 di mezzogiorno. È piuttosto improbabile, ma con un programma importante come questo, non vuoi correre rischi.
Un esempio If-Then-Else
Un altro approccio al problema precedente utilizza la clausola Else. Ecco la stessa routine ricodificata per utilizzare la struttura If-Then-Else:
Sub GreetMe3 () Se Tempo <0. 5 poi MsgBox "Good Morning" Else _ MsgBox "Good Afternoon" End Sub
Notare che la riga il carattere di continuazione (carattere di sottolineatura) è usato nell'esempio precedente. L'istruzione If-Then-Else è in realtà una singola affermazione. VBA fornisce un modo leggermente diverso di codificare costrutti If-Then-Else che utilizzano un'istruzione End If. Pertanto, la procedura GreetMe può essere riscritta come
Sub GreetMe4 () Se Tempo <0. 5 poi MsgBox "Buongiorno" Else MsgBox "Buon pomeriggio" End If End Sub
In effetti, è possibile inserire qualsiasi numero di istruzioni sotto il Se parte e qualsiasi numero di dichiarazioni sotto la parte Else. Questa sintassi è più facile da leggere e rende le dichiarazioni più brevi.
Che cosa succede se è necessario espandere la routine GreetMe per gestire tre condizioni: mattina, pomeriggio e sera? Hai due opzioni: usa tre istruzioni If-Then o usa una struttura nested If-Then-Else. Annidare significa posizionare una struttura If-Then-Else all'interno di un'altra struttura If-Then-Else. Il primo approccio, utilizzando tre istruzioni If-Then, è più semplice:
Sub GreetMe5 () Dim Msg As String If Time = 0. 5 And Time = 0. 75 Then Msg = "Evening" MsgBox "Good" & Msg End Sotto
È stata aggiunta una nuova svolta con l'uso di una variabile. La variabile Msg ottiene un valore di testo diverso, a seconda dell'ora del giorno. L'istruzione MsgBox visualizza il saluto: Buongiorno, Buon pomeriggio o Buonasera.
La seguente routine esegue la stessa azione ma utilizza una struttura If-Then-End If:
Sub GreetMe6 () Dim Msg As String If Time = 0. 5 And Time = 0. 75 Then Msg = "Evening" End If MsgBox "Good" e Msg End Sub
Using ElseIf
Negli esempi precedenti, ogni istruzione nella routine viene eseguita. Una struttura leggermente più efficiente uscirebbe dalla routine non appena una condizione risultasse vera. Al mattino, ad esempio, la procedura dovrebbe visualizzare il messaggio Good Morning e quindi uscire senza valutare le altre condizioni superflue.
Con una piccola routine come questa, non devi preoccuparti della velocità di esecuzione. Ma per le applicazioni più grandi in cui la velocità è critica, è necessario conoscere un'altra sintassi per la struttura If-Then.
Ecco come puoi riscrivere la routine GreetMe usando questa sintassi:
Sub GreetMe7 () Dim Msg As String If Time = 0. 5 And Time <0. 75 then Msg = "Afternoon" Else Msg = "Evening "End If MsgBox" Good "e Msg End Sub
Quando una condizione è vera, VBA esegue le istruzioni condizionali e la struttura If termina. In altre parole, questa procedura è un po 'più efficiente degli esempi precedenti. Il compromesso è che il codice è più difficile da capire.
Un altro esempio If-Then
Ecco un altro esempio che utilizza la forma semplice della struttura If-Then. Questa procedura richiede all'utente una quantità e quindi visualizza lo sconto appropriato, in base alla quantità immessa dall'utente:
Sub ShowDiscount () Dim Quantità As Long Dim Discount As Double Quantità = InputBox ("Immetti quantità:") Se Quantity > 0 Quindi Sconto = 0. 1 Se Quantità> = 25 Quindi Sconto = 0. 15 Se Quantità> = 50 Quindi Sconto = 0. 2 Se Quantità> = 75 Quindi Sconto = 0. 25 MsgBox "Sconto:" & Sconto Fine Sott
Si noti che ciascuna istruzione If-Then in questa routine viene eseguita e il valore di Sconto può cambiare mentre le istruzioni vengono eseguite. Tuttavia, la routine visualizza in definitiva il valore corretto per Sconto perché le istruzioni If-Then sono in ordine di valori di sconto crescente.
La seguente procedura esegue le stesse attività utilizzando la sintassi alternativa ElseIf. In questo caso, la routine termina immediatamente dopo l'esecuzione delle istruzioni per una condizione vera:
Sub ShowDiscount2 () Dim Quantità As Long Dim Discount As Double Quantità = InputBox ("Immetti quantità:") Se Quantità> 0 E Quantità <25 quindi Sconto = 0.1 ElseIf Quantity> = 25 And Quantity <50 then Discount = 0. 15 ElseIf Quantity> = 50 And Quantity <75 then Discount = 0. 2 ElseIf Quantity> = 75 Then Discount = 0. 25 End If MsgBox "Discount:" & Discount End Sub
Queste strutture If-Then multiple sono piuttosto ingombranti. Potresti voler usare la struttura If-Then solo per semplici decisioni binarie.
