In quest’articolo ti mostrerò come utilizzare l'istruzione If Then Else di Excel nel linguaggio delle macro: il VBA.
Attraverso dei semplici esempi ti mostrerò la sintassi dell’istruzione condizionale che ti aiuterà a prendere decisioni in Excel.
La sintassi dell’istruzione If Then Else
L’istruzione If … Then è la struttura di controllo più importante nel linguaggio VBA. Potrai utilizzarla quando vuoi eseguire una o più istruzioni condizionali.
È estremamente utile in tutte quelle situazioni in cui è necessario prendere delle decisioni.
L’istruzione If prevede anche una clausola opzionale Else. Quest’ultima, se inclusa, consente di eseguire una o più azioni se la condizione che si sta testando NON è vera.
Ecco le due sintassi generiche dell’istruzione If Then Else in VBA.

Oppure

Nella prima sintassi non è necessario utilizzare l'istruzione End If. Inoltre, come anticipato, la parte Else di questa istruzione è facoltativa pertanto è stata inserita tra le parentesi quadre.
Nella seconda sintassi, la condizione VERA si trova nella seconda riga. Questo tipo di sintassi è utile quando il codice è lungo ed è composto da più righe. In quest’ultimo caso è necessario utilizzare l'istruzione End If per comunicare ad Excel dove termina il costrutto If Then.
Se l'istruzione End If viene omessa, quando richiesto, VBA mostrerà il seguente messaggio di un errore.

Potrebbero interessarti anche i seguenti articoli:
Esempi di utilizzo dell’istruzione If Then
Vediamo alcuni esempi di utilizzo della struttura If Then senza la clausola Else. In questo primo esempio l’istruzione è inserita in una sola riga. Vogliamo che venga restituito un messaggio se il voto inserito nella cella A1 è inferiore a 60.

Supponiamo di aver inserito il valore 55 nella cella A1. In questo caso la routine mostrerà un messaggio con la scritta "Esame non superato!" poiché il valore contenuto nella cella A1 è inferiore a 60. In alternativa, se il valore contenuto nella cella A1 è maggiore o uguale a 60, la routine termina senza alcun avviso.
Per visualizzare un messaggio diverso se il valore è maggiore o uguale a 60, è possibile aggiungere un'altra istruzione If Then dopo la prima.

È importante notare che è stato utilizzato l’operatore maggiore o uguale a (> =) per la seconda istruzione If Then. Esso assicura che tutti i restanti numeri siano compresi. Con l’utilizzo del solo operatore maggiore di (>), non sarebbe apparso nessun messaggio se il valore della cella A1 fosse stato uguale a 60.
Esempi di utilizzo dell’istruzione If Then Else
Un altro approccio al problema precedente prevede l’utilizzo della clausola Else. Ecco la routine precedente ricodificata per utilizzare la struttura If Then Else.

L’istruzione può essere scritta anche nel modo seguente:

Per facilitare la lettura del codice è stato inserito il carattere di continuazione della riga (trattino basso ovvero underscore).
In realtà l'istruzione If Then Else è una singola istruzione. Tuttavia, il linguaggio VBA fornisce un modo leggermente diverso di codificare questa istruzione attraverso l’aggiunta della dichiarazione End If. Pertanto, la procedura Esito_2 può essere riscritta nel modo seguente.

Infatti, è possibile inserire un numero qualsiasi di istruzioni sotto la parte If e un qualsiasi numero di dichiarazioni sotto la parte Else.
Cosa fare qualora volessimo utilizzare la routine Esito_2 per gestire ulteriori condizioni?
Ad esempio, supponiamo di considerare l’ipotesi di inserimento di un valore non valido ovvero un valore minore di zero o maggiore di 100.
Per far questo, abbiamo a disposizione tre opzioni:
- utilizzare tre istruzioni If … Then;
- utilizzare tre istruzioni If … End If;
- utilizzare una struttura If … Then … Else nidificata.
Il primo approccio, utilizza tre istruzioni If … Then, è il più semplice.

La seconda opzione la stessa azione ma utilizza tre dichiarazioni If … End If.

Infine, nella terza opzione viene utilizzata una struttura If Then Else nidificata. Nidificare significa inserire una struttura If Then Else all'interno di un'altra struttura If Then Else.

La prima sintassi (con tre istruzioni If … Then) è quella che preferisco perché è più facile da leggere e rende le dichiarazioni più brevi.
Come avrai notato, negli esempi precedenti si è reso necessario verificare più condizioni dipendenti.
In queste circostanze occorre utilizzare l'istruzione AND o OR con le condizioni If.
Con l'istruzione AND le condizioni devono essere verificate contemporaneamente (l’una e l’altra) mentre con l'istruzione OR alternativamente (l’una o l’altra).
Come ottimizzare l’istruzione If Then Else con l’utilizzo di ElseIf
Negli esempi precedenti, viene eseguita ogni istruzione presente nella routine.
Una struttura efficiente deve consentire l’uscita dalla routine non appena una condizione risulta vera.
Ad esempio, nel caso in cui il valore presente nella cella A1 fosse compreso tra 60 e 100 la procedura dovrebbe visualizzare il messaggio "Esame superato!" e quindi uscire, senza valutare le altre condizioni.
Con una piccola routine come questa, non è necessario preoccuparsi della velocità di esecuzione. Ma per applicazioni più grandi, in cui la velocità è fondamentale, occorre utilizzare un'altra sintassi per la struttura If … Then.
Il codice della macro Esito_2 può essere ulteriormente ottimizzato utilizzando l'istruzione ElseIf.
Ecco come è possibile riscrivere la routine Esito_2 usando una sintassi differente.

Queste istruzioni If … Then multiple risultano piuttosto ingombranti.
In genere, si usa l’istruzione If … Then solo per semplici decisioni binarie (Vero o Falso).
Quando una decisione implica tre o più scelte, la struttura Select Case offre un approccio più semplice ed efficiente.
Potrebbero interessarti anche i seguenti articoli:
Vuoi imparare a utilizzare il linguaggio Excel VBA?
Basta con i lavori noiosi e ripetitivi! Grazie al VBA puoi far lavorare Excel al tuo posto!
Ho registrato per te un corso interamente dedicato alle Macro e al VBA.
Attraverso degli esempi pratici, ti introdurrò, al mondo delle Macro di Excel illustrandoti tutto il potenziale per automatizzare le tue attività di lavoro quotidiane.
Cosa aspetti?
Sfrutta tutto il potenziale di Excel con il corso Macro e VBA!
Salve Damiano,
ho letto la sua guida sulla funzione IF e relative su VBA.
Mi sto appena avvicinando alla programmazione su Visual basic e mi sono scontrato giá con un problema a cui non riesco a trovare una soluzione.
Avrei bisogno che la funzione MsgBox si avviasse automaticamente al superare un determinato valore lungo una colonna, (valore) che é a sua volta il risultato di una formula.
Sono riuscito a avviare la MsgBox ak cambiamento manuale di un valore in un determinato range, tuttavia non quando il cambiamento del valore deriva dal risultato di una formula.
Avrebbe una guida o dei consigli a riguardo?
Cordiali saluti
Salve Andrea,
ecco un esempio che potrebbe ritornarti utile:
1) Inserisci un nuovo Modulo e aggiungi la seguente macro:
Sub Test()
MsgBox Application.WorksheetFunction.Sum(Range("A1:M10"))
End Sub
2) All'interno dell'Editor fai doppio clic sul foglio (nell'area Progetto- VBAProject) e utilizza il seguente evento:
Private Sub Worksheet_Change(ByVal Target As Range)
Call Test
End Sub
A questo punto ciascuna modifica ai dati (nell'intervallo A1:M10) mostrerà il risultato della somma.
Spero il suggerimento ti sia utile;)