If Then Else Statement in Excel VBA (spiegato con esempi)

In Excel VBA, l'istruzione IF Then Else consente di verificare una condizione ed eseguire un'azione di conseguenza.

Questo è estremamente prezioso in molte situazioni, come vedremo negli esempi più avanti in questo tutorial.

Per farti un semplice esempio, supponi di avere un elenco di voti in Excel e di voler evidenziare tutti quegli studenti che hanno ottenuto una A. Ora, se ti chiedo di farlo manualmente, controllerai il voto di ogni studente e se è una A, la evidenzierai e, in caso contrario, la lascerai così com'è.

La stessa logica può essere costruita in VBA usando il Se poi altrimenti anche la dichiarazione (e ovviamente fare molto di più che evidenziare i voti).

In questo tutorial, ti mostrerò diversi modi in cui il costrutto "If Then Else" può essere utilizzato in Excel VBA e alcuni esempi pratici in azione.

Ma prima di entrare nello specifico, lascia che ti dia la sintassi dell'istruzione "IF Then Else".

Se sei interessato a imparare VBA nel modo più semplice, dai un'occhiata a my Formazione online su VBA di Excel.

Sintassi - IF Then Else

Di seguito è riportata la sintassi generica del costrutto If Then Else in VBA

Condizione IF Allora true_code [Else false_code]

o

IF condizione Then true_code Else false_code End IF

Nota che la parte Else di questa dichiarazione è facoltativa.

Ora, se ti stai chiedendo qual è la differenza tra le due sintassi, lasciami chiarire.

La prima sintassi è una semplice istruzione IF THEN ELSE di una riga in cui non è necessario utilizzare l'istruzione END IF.

Tuttavia, nella seconda sintassi, la parte true_code è nella seconda riga. Ciò è utile quando il codice che è necessario eseguire nel caso in cui la condizione IF sia vera è lungo e consiste di più righe.

Quando si divide l'istruzione IF in più righe, è necessario indicare a VBA dove termina il costrutto IF Then.

Quindi è necessario utilizzare l'istruzione End IF.

Nel caso in cui non utilizzi End IF quando richiesto, VBA ti mostrerà un errore: "Block IF without END IF"

Esempi di utilizzo dell'istruzione IF Then in VBA

Per darti un'idea di come funziona l'istruzione IF-THEN in VBA, iniziamo con alcuni esempi di base (alcuni esempi pratici e più utili sono trattati più avanti in questo tutorial).

Supponiamo di avere il punteggio di uno studente nella cella A1 e di voler verificare se lo studente ha superato o meno l'esame (la soglia dei voti è 35).

Quindi puoi utilizzare il seguente codice:

Sub CheckScore() If Range("A1").Value >=35 Then MsgBox "Pass" End Sub

Il codice sopra ha una singola riga di istruzione IF che controlla il valore nella cella A1.

Se è più di 35, mostra il messaggio - "Pass".

Se è inferiore a 35, non succede nulla.

Ma cosa succede se si desidera mostrare un messaggio in entrambi i casi, se uno studente ha superato o meno l'esame.

Il codice seguente farebbe questo:

Sub CheckScore() If Range("A1").Value >= 35 Then MsgBox "Pass" Else MsgBox "Fail" End If End Sub

Il codice precedente utilizza l'istruzione IF e ELSE per eseguire due condizioni diverse. Quando il punteggio è maggiore (o uguale a) 35, la condizione IF è vera e il codice subito sotto viene eseguito (tutto prima dell'istruzione Else).

Ma quando la condizione IF è FALSE, il codice salta alla parte Else ed esegue il blocco di codice al suo interno.

Nota che quando usiamo una singola riga dell'istruzione IF Then, non è necessario utilizzare End IF. Ma quando lo dividiamo in più di una riga, dobbiamo usare l'istruzione End If.

Annidato IF Then (più istruzioni IF Then)

Finora abbiamo usato una singola istruzione IF Then.

Nel caso in cui tu abbia più condizioni da verificare, puoi utilizzare:

  • Condizioni IF multiple
  • Istruzione If Then Else
  • IF Then ElseIf Else costrutto

Lascia che ti mostri come differiscono e come utilizzarlo in Excel VBA.

Dichiarazioni multiple IF Then

Prendiamo lo stesso esempio di utilizzo del punteggio di uno studente.

Se lo studente ha un punteggio inferiore a 35, il messaggio da visualizzare è "Fail", se il punteggio è maggiore o uguale a 35, il messaggio da visualizzare è "Pass".

Possiamo usare il codice seguente per farlo:

Sub CheckScore() If Range("A1").Value = 35 Then MsgBox "Pass" End Sub

È possibile utilizzare più istruzioni IF Then come mostrato sopra. Sebbene funzioni, non è un esempio di buona codifica (come vedrai le alternative di seguito).

Nel caso in cui decidi di utilizzarlo, ricorda che queste dichiarazioni dovrebbero essere indipendenti o escludersi a vicenda. La cosa importante da sapere qui è che nel costrutto precedente vengono valutate tutte le istruzioni IF e quelle in cui la condizione è vera, viene eseguito il codice.

Quindi, anche se la prima istruzione IF è corretta, la seconda verrebbe comunque valutata.

IF Then Else Statement

Supponiamo che questa volta, invece di visualizzare semplicemente il messaggio Pass/Fail, abbiamo un'altra condizione.

Se lo studente ha un punteggio inferiore a 35, il messaggio da visualizzare è 'Fail', se il punteggio è maggiore o uguale a 35, il messaggio da visualizzare è 'Pass', e se il punteggio è superiore a 80, il messaggio da visualizzare è "Superato, con distinzione".

Possiamo usare il codice seguente per farlo:

Sub CheckScore() If Range("A1").Value < 35 Then MsgBox "Fail" Else If Range("A1").Value <80 Then MsgBox "Pass" Else MsgBox "Pass, with Distinction" End If End If End Sub

Nel codice sopra, abbiamo usato più istruzioni IF (nidificate IF Then) con l'aiuto di Else.

Quindi c'è un costrutto "IF Then Else" all'interno di un costrutto "IF Then Else". Questo tipo di nidificazione consente di verificare più condizioni ed eseguire il relativo blocco di codice.

IF Then ElseIf Else Statement

Il codice sopra (che abbiamo visto nella sezione precedente) può essere ulteriormente ottimizzato utilizzando l'istruzione ElseIf.

Ecco cosa stiamo cercando di fare: se lo studente ottiene un punteggio inferiore a 35, il messaggio da visualizzare è "Fallito", se il punteggio è maggiore o uguale a 35, il messaggio da visualizzare è "Riuscito" e se il punteggio è superiore a 80, il messaggio da visualizzare è 'Pass, with Distinction'.

Sub CheckScore() If Range("A1").Value < 35 Then MsgBox "Fail" ElseIf Range("A1").Value <80 Then MsgBox "Pass" Else MsgBox "Pass, with Distinction" End If End Sub

Il codice sopra utilizza ElseIf, che ci consente di mantenere tutte le condizioni all'interno di una singola istruzione IF Then.

Utilizzo di AND e OR in IF Then Else

Finora in questo tutorial, abbiamo verificato solo una singola condizione alla volta.

Tuttavia, quando si hanno più condizioni dipendenti, è possibile utilizzare l'istruzione AND o OR con le condizioni IF.

Di seguito è riportata la sintassi dell'utilizzo della condizione AND/OR con l'istruzione IF Then.

IF Condition1 AND Condition2 Then true_code Else false_code End IF

Nel codice sopra, solo quando vengono soddisfatte sia Condition1 che Condition2, viene eseguito true_code. Anche se una delle condizioni è falsa, eseguirà false_code.

Con OR, anche se una delle condizioni è vera, eseguirà il true_code. Solo quando tutte le condizioni sono false, esegue il false_code.

Ora vediamo come funzionano le istruzioni AND e OR con il costrutto IF Then Else.

Supponiamo di avere i punteggi per due materie invece di una e di voler verificare le seguenti condizioni:

  • Fallire - Quando il punteggio è inferiore a 35 in una qualsiasi delle materie.
  • Passaggio - Quando il punteggio è maggiore o uguale a 35, ma inferiore a 80 in entrambe le materie.
  • Promosso con distinzione - Quando il punteggio è superiore a 35 in entrambe le materie ed è maggiore o uguale a 80 in una o entrambe le materie.

Ecco il codice che lo farà:

Sub CheckScore() If Range("A1").Value < 35 Or Range("B1").Value <35 Then MsgBox "Fail" ElseIf Range("A1").Value <80 And Range("B1"). Valore < 80 Then MsgBox "Pass" Else MsgBox "Pass, with Distinction" End If End Sub

Il codice sopra utilizza sia le istruzioni OR che AND.

Puoi anche scrivere questo stesso codice con una leggera modifica (usando OR invece di AND).

Sub CheckScore() If Range("A1").Value < 35 Or Range("B1").Value 80 Or Range("B1").Value > 80 Then MsgBox "Pass, with Distinction" Else MsgBox "Pass" End Se End Sub

Entrambi i codici VBA sopra ti daranno lo stesso risultato. Personalmente, preferisco il primo in quanto ha un flusso logico di controllo dei punteggi (ma sono solo io).

Utilizzo di Diverso da in If Then

In tutti gli esempi sopra, abbiamo utilizzato le condizioni che controllano se un valore è uguale a un valore specificato o meno.

È inoltre possibile utilizzare codici simili durante il controllo quando il valore non è uguale a un valore specificato nel codice VBA. Non uguale a rappresentato dal VBA di Excel.

Per vedere un esempio pratico di utilizzo di , dai un'occhiata all'Esempio 1 di seguito.

Utilizzo di If Then Else con i loop in VBA

Finora, abbiamo esaminato alcuni esempi utili per capire come funzionano le istruzioni "IF-THEN" in VBA, tuttavia, non sono utili nel mondo pratico.

Se ho bisogno di valutare gli studenti, posso farlo facilmente utilizzando le funzioni di Excel.

Quindi diamo un'occhiata ad alcuni esempi utili e pratici che possono aiutarti ad automatizzare alcune cose ed essere più efficiente.

Esempio 1 - Salva e chiudi tutte le cartelle di lavoro tranne la cartella di lavoro attiva

Se hai molte cartelle di lavoro aperte e vuoi chiuderle rapidamente tutte, tranne la cartella di lavoro attiva, puoi utilizzare il codice seguente,

Sub SaveCloseAllWorkbooks() Dim wb as workbook for each wb in workbooks In caso di errore riprendi successivo If wb.Name ActiveWorkbook.Name Then wb.Save wb.Close End If Next wb End Sub

Il codice sopra salverebbe e chiuderebbe tutte le cartelle di lavoro (tranne quella attiva).

Utilizza il ciclo For Next per esaminare la raccolta di tutte le cartelle di lavoro aperte e controlla il nome utilizzando la condizione IF.

Se il nome non è uguale a quello della cartella di lavoro attiva, la salva e la chiude.

Nel caso in cui sia presente un codice VBA in una delle cartelle di lavoro e non lo hai salvato come .xls o .xlsm, vedrai un avviso (poiché i codici vba vengono persi quando lo salvi in ​​formato .xlsx).

Esempio 2 - Evidenzia celle con valori negativi

Supponiamo di avere una colonna piena di numeri e di voler evidenziare rapidamente tutte le celle con valori negativi in ​​rosso, puoi farlo utilizzando il codice seguente.

Sub HighlightNegativeCells() Dim Cll As Range For each Cll In Selection If Cll.Value < 0 Then Cll.Interior.Color = vbRed Cll.Font.Color = vbWhite End If Next Cll End Sub

Il codice sopra usa il ciclo For Each e controlla ogni cella nella selezione che hai fatto. Se la cella ha un valore negativo, viene evidenziata in rosso con il colore del carattere bianco.

Esempio 3 - Nascondi tutto il foglio di lavoro tranne il foglio di lavoro corrente

Nel caso in cui desideri nascondere rapidamente tutti i fogli di lavoro tranne quello attivo, puoi utilizzare il codice seguente:

Sub HideAllExceptActiveSheet() Dim ws come foglio di lavoro per ogni ws in ThisWorkbook.Worksheets If ws.Name ActiveSheet.Name Then ws.Visible = xlSheetHidden Next ws End Sub

Il codice sopra usa il ciclo For Each per passare attraverso una raccolta di fogli di lavoro. Controlla il nome di ciascun foglio di lavoro e lo nasconde se non è il foglio di lavoro attivo.

Esempio 4 - Estrarre la parte numerica da una stringa alfanumerica

Se hai stringhe alfanumeriche nelle celle e vuoi estrarre la parte numerica da essa, puoi farlo usando il codice seguente:

Funzione GetNumeric(CellRef As String) Dim StringLength As Integer StringLength = Len(CellRef) For i = 1 To StringLength If IsNumeric(Mid(CellRef, i, 1)) Then Result = Result & Mid(CellRef, i, 1) Next i GetNumeric = Funzione di fine risultato

Questo codice creerà una funzione personalizzata in Excel che può essere utilizzata all'interno del foglio di lavoro (proprio come una normale funzione).

Dove inserire il codice VBA?

Ti chiedi dove va il codice VBA nella cartella di lavoro di Excel?

Excel ha un backend VBA chiamato editor VB. Devi copiare e incollare il codice nella finestra del codice del modulo VB Editor.

Ecco i passaggi per farlo:

  1. Vai alla scheda Sviluppatore.
  2. Fare clic sull'opzione Visual Basic. Questo aprirà l'editor VB nel backend.
  3. Nel riquadro Project Explorer nell'editor VB, fare clic con il pulsante destro del mouse su qualsiasi oggetto per la cartella di lavoro in cui si desidera inserire il codice. Se non vedi Esplora progetti, vai alla scheda Visualizza e fai clic su Esplora progetti.
  4. Vai su Inserisci e fai clic su Modulo. Questo inserirà un oggetto modulo per la tua cartella di lavoro.
  5. Copia e incolla il codice nella finestra del modulo.

Aiuterete lo sviluppo del sito, condividere la pagina con i tuoi amici

wave wave wave wave wave