If Then Else: istruzione If in Excel VBA 

 Gennaio 15, 2021

By  Damiano Causale

  • Home
  • Blog
  • If Then Else: istruzione If in Excel VBA

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.

If VBA

Oppure

La sintassi dell’istruzione If Then Else

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.

If else | Messaggio di errore

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.

Esempi di utilizzo dell’istruzione If Then

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.

Esempi di utilizzo dell’istruzione If Then

È 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.

Esempi di utilizzo dell’istruzione If Then Else | If 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.

VBA Else If

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.

istruzione If Then

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

istruzione If Then

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.

if else if

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.

Come ottimizzare l’istruzione If Then Else con l’utilizzo di ElseIf

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!

Damiano Causale


Mi chiamo Damiano Causale, istruttore Microsoft certificato, per lavoro aiuto aziende e privati nell'utilizzo di Excel.

Damiano Causale

Your email address will not be published. Required fields are marked

  1. 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

    1. 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;)

{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}