#VBA Excel: istruzioni condizionali

Come gestire le condizioni vero / falso con le istruzioni

Autore: Andrea Pacchiarotti
Ultimo aggiornamento: 16 Giugno 2020
Categoria: Microsoft Office Excel VBA

VBA Excel: istruzioni condizionali
#VBA Excel: istruzioni condizionali

Istruzioni condizionali

Le istruzioni condizionali, dette anche istruzioni di controllo o istruzioni di flusso, servono per decidere quale azione eseguire a seconda della condizione; ne esistono di vario tipo e, in VBA Excel, vengono  introdotte dalle parole chiave If, IIf e Select Case. Sarà il programmatore a decidere qual è più conveniente utilizzare.

Sommario #VBA Excel: istruzioni condizionali

If

If Condizione Then
Istruzioni
End If

Nell’If a riga singola non è necessario chiudere l’If

If Condizione Then Istruzioni

A prima vista i costrutti a riga singola possono sembrare più semplici, ma quando condizioni ed istruzioni sono lunghe, diventano meno leggibili.

Esempio - Inizializzando una variabile chiamata numero ad 1, far uscire una finestra contenente la frase «Vali 1», l’icona dell’informazione e Info nella barra del titolo.
Quando funziona renderlo a riga singola.
Ecco il codice per la riga multipla:
Sub Condizione()
Dim numero As Byte
numero = 1
If numero = 1 Then
MsgBox "Vali 1", 64, "Info"
End If
End Sub
È possibile evitare di mettere = 1 e scrivere invece solo la variabile numero.

Ed ecco quello per la riga singola:
Sub Condizione()
Dim numero As Byte
numero = 1
If numero = 1 Then MsgBox "Vali 1", 64, "Info“
End Sub


If con Else specifica 2 azioni da prendere in base alla condizione

If Condizione Then
Istruzioni
Else
Istruzioni per Else
End If

If con Else a riga singola (non si chiude l’If)

If Condizione Then Istruzioni Else Istruzioni per Else

Esempio - Si hanno due numeri: 1 e 2. Attraverso il suddetto costrutto, inizializzando una variabile chiamata numero a 2 e testando con l’If la variabile con l’1, far uscire una finestra contenente la frase «Vali 1» o «Vali 2» sfruttando l’Else (ovviamente uscirà quest’ultima dato che la variabile è stata inizializzata a 2). Quando funziona renderlo a riga singola.
Ecco il codice per la riga multipla:
Sub Condizione()
Dim numero As Byte
numero = 2
If numero = 1 Then
MsgBox "Vali 1"
Else
MsgBox "Vali 2"
End If
End Sub

Ed ecco quello per la riga singola:
Sub Condizione()
Dim numero As Byte
numero = 2
If numero = 1 Then MsgBox "Vali 1" Else MsgBox "Vali 2"
End Sub


La nidificazione consente di scegliere fra più istruzioni da eseguire in base a diverse condizioni
If Condizione Then
Istruzioni
Else
If Condizione2 Then
Istruzioni1
Else
Istruzioni 2
End If
End If


Nell’If semplificato con ElseIf non è necessario chiudere l’ElseIf
If Condizione Then
Istruzioni
ElseIf Condizione2 Then
Istruzioni1
Else
Istruzioni 2
End If


Opera come If ... Then ... Else.
Sub Condizione()
Dim eta As Integer, cat As String
eta = 16
cat = IIf(eta <= 18, "Ragazzo", "Adulto")
MsgBox ("Categoria : " & cat)
End Sub

Ecco IIf usato al posto di If ... Then ... ElseIf
Sub Condizione() 
Dim eta As Byte, cat As String
eta = 74
cat = IIf(eta <= 18, "Ragazzo", IIf(eta < 55, "Adulto", "Anziano"))
MsgBox "Fascia eta : " & cat
End Sub

Esercizi

Esercizio su If Then Else a riga multipla con MsgBox in una variabile.
MsgBox con frase “Vuoi continuare?”, 2 pulsanti: Sì e No e il titolo “Scelta”
Se si clicca:

Sub Condizione()
Dim Risposta As String
Risposta = MsgBox("Vuoi continuare?", vbYesNo, "Scelta") ‘4
If Risposta = vbYes Then ‘6, vbNo 7
MsgBox "Hai deciso di continuare"
Else
MsgBox "Stai per uscire dall'applicazione"
End If
End Sub

Esercizio su If Then Else a riga multipla nidificato con InputBox in una variabile e MsgBox.
Attraverso una variabile gradi ottenere una InputBox  posizionata a 4000, 1000 con frase:
“A quanti gradi metti il termostato:” e titolo “Temperatura”
Se la temperatura è:

Usare gli operatori di confronto e, quando necessario, l’And.
Prevedere o meno l’uso della virgola e di numeri negativi.
Semplificare il listato precedente con If ... Then .. ElseIf.

Ecco l’esercizio risolto con If … Then … Else:
la tipizzazione è stata effettuata con Single per considerare eventuali decimali, ovviamente a seconda delle circostanze, si sarebbe potuto utilizzare Integer o Byte
Sub Condizione()
Dim gradi As Single
gradi = InputBox("Inserisci gradi: ", "Temperatura", , 4000, 1000)
If gradi > 20 And gradi <= 25 Then
MsgBox "Temperatura gradevole"
Else
If gradi > 25 Then
MsgBox "Temperatura alta"
Else
If gradi = 20 Then
MsgBox "Temperatura giusta"
Else
MsgBox "Temperatura bassa"
End If 
End If
End If
End Sub

Ed ecco l’esercizio risolto con If … Then … ElseIf:
Sub Condizione()
Dim gradi As Single ‘Integer o Byte
gradi = InputBox("Inserisci gradi: ", "Temperatura", , 4000, 1000)
If gradi > 20 And gradi <= 25 Then
MsgBox "Temperatura gradevole"
Elseif gradi > 25 Then
MsgBox "Temperatura alta"
Elseif gradi = 20 Then
MsgBox "Temperatura giusta"
Else
MsgBox "Temperatura bassa"
End If
End Sub

Tramite InputBox e If…ElseIf inserire dati numerici nella cella A1 e testuali in A2. Non si tipizzi.
IsNumeric() è la funzione che permette il controllo sui numeri
Sub InserisciInCella()
Dim MioValore
MioValore = InputBox("Inserisci qualcosa: ")
If MioValore = IsNumeric(MioValore) Then
Range("A1").Value = MioValore
ElseIf MioValore <> IsNumeric(MioValore) Then
Range("A2").Value = MioValore
End If
End Sub

Tramite InputBox e If…Then…ElseIf inserire in A1 numeri tra 1 e 100, in A2 numeri  tra 200 e 300, in A3 dati testuali. Non si tipizzi.
Sub InserisciInCelle()
Dim MioValore
MioValore = InputBox("Inserisci ciò che vuoi:")
If MioValore >= 1 And MioValore <= 100 Then
Range("A1").Value = MioValore
ElseIf MioValore >= 200 And MioValore <= 300 Then
Range("A2").Value = MioValore
ElseIf MioValore <> IsNumeric(MioValore) Then
Range("A3").Value = MioValore
End If
End Sub


Select Case

Si utilizza se si hanno tante scelte da effettuare e diventa difficile leggere un If

Select Case variabile
Case condizione1
Istruzioni1
...
Case condizione n
Istruzioni n
Case Else
Istruzioni Else
End Select

Con Select Case si possono usare:
- gli operatori di confronto
Case Is operatore espressione
Case Is< 10
- l’operatore To per specificare un intervallo 
condizione1 To condizione2 
Case 1 To 10
(ma anche: Case 1 To 10 , Case 20 To 100 )
          - l’oppure mettendo la virgola (non l’Or)
Case 8, 9, …
          - il testo mettendo le virgolette
Case "Pippo"
Case is "Pippo"
Case "a" To "f" 
(ma anche: Case "a" To "f", Case "i" To "p")

Esercizio

Esercizio simile al precedente, ma con 5 risposte decise dal lettore per i seguenti gradi: >23°, tra 21° e 23°, tra 17° e 20°, >10°, fino a 10°.
Usare operatori di confronto e operatore To.
Partire dal valore più alto e scendere.
Se non si considerano i negativi è possibile tipizzare con Byte
Sub Condizione()
Dim gradi As Integer
gradi = InputBox("Inserisci gradi: ", "Misura la temperatura di casa")
Select Case gradi
Case Is > 23
MsgBox "Troppo caldo, vedrai che bolletta"
Case 21 To 23
MsgBox "Bello caldo, si sta bene"
Case 17 To 20
MsgBox "Temperatura giusta"
Case Is > 10
MsgBox "Raffreddore assicurato"
Case Else
MsgBox "Troppo freddo si ghiaccia"
End Select
End Sub



Per saperne di più su Microsoft Excel potrebbero interessarti i video corsi Excel o questi due libri:


Se vuoi approfondire alcuni dei temi trattati, visita la pagina con le mie pubblicazioni cartacee e online.

Se l'articolo ti è piaciuto, condividilo!

Segui l'hashtag #AndreaPacchiarotti