VBA If, ElseIf, Else (Guida definitiva alle istruzioni If)

Istruzione If VBA

Se poi

Le istruzioni If VBA consentono di verificare se le espressioni sono VERE o FALSE, eseguendo codice diverso in base ai risultati.Diamo un'occhiata a un semplice esempio:
1 If Range("a2").Value > 0 Then Range("b2").Value = "Positive"
Questo verifica se il valore in Range A2 è maggiore di 0. In tal caso, impostando Range B2 uguale a "Positivo"Nota: durante il test delle condizioni utilizzeremo gli operatori di confronto =, >, <, , =. Ne parleremo più dettagliatamente più avanti nell'articolo.Ecco la sintassi per una semplice istruzione If di una riga:
1 Se [espressione_prova] allora [azione]
Per semplificare la lettura, puoi utilizzare un carattere di continuazione della riga (trattino basso) per espandere le istruzioni If a due righe (come abbiamo fatto nell'immagine sopra):
12 Se [espressione_prova] allora _[azione]
12 If Range("a2").Value > 0 Then _Intervallo ("b2"). Valore = "Positivo"

Finisci se

L'istruzione if "a riga singola" di cui sopra funziona bene quando si verifica una condizione. Ma poiché le tue istruzioni IF diventano più complicate con più condizioni, dovrai aggiungere un "End If" alla fine dell'istruzione if:
123 If Range("a2").Value > 0 ThenIntervallo ("b2"). Valore = "Positivo"Finisci se

Qui la sintassi è:

123 Se [test_expression] allora[azione]Finisci se

End If indica la fine dell'istruzione if.

Ora aggiungiamo un ElseIF:

ElseIF - Condizioni multiple

L'ElseIf viene aggiunto a un'istruzione If esistente. ElseIf verifica se una condizione è soddisfatta SOLO se le condizioni precedenti non sono state soddisfatte.Nell'esempio precedente abbiamo verificato se il valore di una cella è positivo. Ora verificheremo anche se il valore della cella è negativo con un ElseIf:
12345 If Range("a2").Value > 0 ThenIntervallo ("b2"). Valore = "Positivo"ElseIf Range("a2").Value < 0 ThenIntervallo ("b2"). Valore = "Negativo"Finisci se

Puoi utilizzare più ElseIf per testare più condizioni:

1234567891011 Sub If_Multiple_Conditions()If Range("a2").Value = "Cat" ThenRange("b2"). Valore = "Miao"ElseIf Range("a2").Value = "Dog" ThenRange("b2").Value = "Woof"ElseIf Range("a2").Value = "Duck" ThenIntervallo ("b2"). Valore = "Quack"Finisci seFine sottotitolo

Ora aggiungeremo un Altro:

Altro

Il Altro verrà eseguito se non sono state soddisfatte altre condizioni precedenti.

Termineremo il nostro esempio utilizzando un Else per indicare che se il valore della cella non è positivo o negativo, allora deve essere zero:

1234567 If Range("a2").Value > 0 ThenIntervallo ("b2"). Valore = "Positivo"ElseIf Range("a2").Value < 0 ThenIntervallo ("b2"). Valore = "Negativo"AltroIntervallo ("b2"). Valore = "Zero"Finisci se

Se altro

Il tipo più comune di istruzione If è un semplice If-Else:

1234567 Sub If_Else()If Range("a2").Value > 0 ThenIntervallo ("b2"). Valore = "Positivo"AltroIntervallo ("b2"). Valore = "Non positivo"Finisci seFine sottotitolo

IF annidati

Puoi anche "nidificare" if dichiarazioni l'una dentro l'altra.

1234567891011 Sub Nested_Ifs()If Range("a2").Value > 0 ThenIntervallo ("b2"). Valore = "Positivo"AltroIf Range("a2").Value < 0 ThenIntervallo ("b2"). Valore = "Negativo"AltroIntervallo ("b2"). Valore = "Zero"Finisci seFinisci seFine sottotitolo

SE - O, E, Xor, Non

Successivamente discuteremo degli operatori logici: Or, And, Xor, Not.

Io per

Il o l'operatore verifica se almeno una condizione è soddisfatta.

Il codice seguente verificherà se il valore nell'intervallo A2 è inferiore a 5.000 o maggiore di 10.000:

123 If Range("a2").Value 10000 ThenIntervallo("b2"). Valore = "Fuori intervallo"Finisci se

Puoi includere più Or in una riga:

123 If Range("a2").Value 10000 Or Range("a2").Value = 9999 ThenIntervallo("b2"). Valore = "Fuori intervallo"Finisci se

Se hai intenzione di utilizzare più Or, si consiglia di utilizzare un carattere di continuazione di riga per rendere più facile la lettura del codice:

123456 If Range("a2").Value < 5000 oppure _Intervallo ("a2"). Valore > 10000 oppure _Intervallo ("a2"). Valore = 9999 AlloraIntervallo ("b2"). Valore = "Fuori intervallo"Finisci se

Se E

L'operatore And consente di verificare se TUTTE le condizioni sono soddisfatte.

123 If Range("a2").Value >= 5000 And Range("a2").Value <= 10000 ThenIntervallo ("b2"). Valore = "In intervallo"Finisci se

Se Xor

L'operatore Xor consente di verificare se esattamente una condizione è soddisfatta. Se vengono soddisfatte zero condizioni, Xor restituirà FALSE, se vengono soddisfatte due o più condizioni, anche Xor restituirà false.

Raramente ho visto Xor usato nella programmazione VBA.

Altrimenti

L'operatore Not viene utilizzato per convertire FALSE in TRUE o TRUE in FALSE:

123 Sub IF_Not()MsgBox non (vero)Fine sottotitolo

Si noti che l'operatore Not richiede parentesi che circondano l'espressione per passare.

L'operatore Not può essere applicato anche alle istruzioni If:

123 If Not (Range("a2").Value >= 5000 And Range("a2").Value <= 10000) ThenIntervallo ("b2"). Valore = "Fuori intervallo"Finisci se

Se confronti

Quando si effettuano confronti, di solito si utilizza uno degli operatori di confronto:

Operatore di confronto Spiegazione
= Uguale a
Non uguale a
> Più grande di
>= Maggiore o uguale a
< Meno di
<= Minore o uguale a

Tuttavia, puoi anche usare qualsiasi espressione o funzione che risulta VERO o FALSO

If - Funzione booleana

Quando si creano espressioni per istruzioni If, è anche possibile utilizzare qualsiasi funzione che generi TRUE o False. VBA ha alcune di queste funzioni:

Funzione Descrizione
È Data Restituisce VERO se l'espressione è una data valida
È vuoto Controlla celle vuote o variabili non definite
IsError Controlla i valori di errore
È zero Controlla il valore NULL
È numerico Controlla il valore numerico

Si possono chiamare così:

1 If IsEmpty(Range("A1").Value) Then MsgBox "Cell Empty"

Excel ha anche molte funzioni aggiuntive che possono essere chiamate usando WorksheetFunction. Ecco un esempio della funzione IsText di Excel:

12 If Application.WorksheetFunction.IsText(Range("a2").Value) Then _MsgBox "La cella è testo"

Puoi anche creare le tue funzioni definite dall'utente (UDF). Di seguito creeremo una semplice funzione booleana che restituisce TRUE. Quindi chiameremo quella funzione nella nostra istruzione If:

1234567891011 Sub If_Function()Se TrueFunction alloraMsgBox "Vero"Finisci seFine sottotitoloFunzione TrueFunction() come booleanaTrueFunction = TrueFine funzione

Testo a confronto

Puoi anche confrontare testo simile al confronto di numeri:
1 Msgbox "a" = "b"
1 Msgbox "a" = "a"
Quando si confronta il testo, è necessario essere consapevoli del "Case" (superiore o inferiore). Per impostazione predefinita, VBA considera le lettere con casi diversi come non corrispondenti. In altre parole, "A" "a".Se desideri che VBA ignori le maiuscole, devi aggiungere la dichiarazione Option Compare Text nella parte superiore del modulo:
1 Opzione Confronta testo

Dopo aver fatto tale dichiarazione "A" = "a":
12345 Opzione Confronta testoSub If_Text()MsgBox "a" = "A"Fine sottotitolo

VBA se mi piace

L'operatore Like VBA consente di effettuare confronti imprecisi di testo. Fai clic sul link "Mi piace Operatore" per saperne di più, ma di seguito mostreremo un esempio di base:

12345678 Dim strName as StringstrName = "Signor Carlo"Se strName Like "Mr*" ThenMsgBox "Vero"AltroMsgBox "Falso"Finisci se

Qui stiamo usando un carattere jolly asterisco "*". Il * sta per qualsiasi numero di qualsiasi carattere. Quindi l'istruzione If di cui sopra restituirà TRUE. L'operatore Like è uno strumento estremamente potente, ma spesso sottoutilizzato, per gestire il testo.

Se loop

I loop VBA ti consentono di ripetere le azioni. La combinazione di IF-ELSE con i loop è un ottimo modo per elaborare rapidamente molti calcoli.

Continuando con il nostro esempio Positivo/Negativo, aggiungeremo un For Each Loop per scorrere un intervallo di celle:

1234567891011121314 Sub If_Loop()Dim Cell come intervalloPer ogni cella nell'intervallo ("A2: A6")Se Cell.Value > 0 AlloraCell.Offset(0, 1).Value = "Positivo"ElseIf Cell.Value < 0 AlloraCell.Offset(0, 1).Value = "Negativo"AltroCell.Offset(0, 1).Value = "Zero"Finisci seCella successivaFine sottotitolo

Se altro esempi

Ora esamineremo alcuni esempi più specifici.

Controlla se la cella è vuota

Questo codice controllerà se una cella è vuota. Se è vuoto, ignorerà la cella. Se non è vuoto, restituirà il valore della cella alla cella a destra:
1234567 Sub If_Cell_Empty()If Range("a2").Value "" ThenIntervallo ("b2"). Valore = Intervallo ("a2"). ValoreFinisci seFine sottotitolo

Controlla se la cella contiene testo specifico

La funzione Instr verifica se viene trovata una stringa di testo in un'altra stringa. Usalo con un'istruzione If per verificare se una cella contiene testo specifico:
123 If Instr(Range("A2").value,"text") > 0 ThenMsgbox "Testo trovato"Finisci se

Controlla se la cella contiene testo

Questo codice verificherà se una cella è testo:
1234567 Sub If_Cell_Is_Text()If Application.WorksheetFunction.IsText(Range("a2").Value) ThenMsgBox "La cella è testo"Finisci seFine sottotitolo

Se Goto

È possibile utilizzare il risultato di un'istruzione If per "Vai a" un'altra sezione di codice.
12345678910 Sub IfGoTo ()If IsError(Cell.value) ThenVai a SaltaFinisci se"Un po' di codice"Saltare:Fine sottotitolo

Elimina riga se la cella è vuota

Usando If e loop puoi verificare se una cella è vuota e, in tal caso, eliminare l'intera riga.
123456789 Sub DeleteRowIfCellBlank()Cella fioca come intervalloPer ogni cella nell'intervallo ("A2: A10")If Cell.Value = "" Then Cell.EntireRow.DeleteCella successivaFine sottotitolo

Se MessageBox Sì / No

Con VBA Message Boxes puoi chiedere all'utente di selezionare tra diverse opzioni. La casella di messaggio Sì/No chiede all'utente di selezionare Sì o No. È possibile aggiungere una casella di messaggio Sì/No a una procedura per chiedere all'utente se desidera continuare a eseguire la procedura o meno. Gestisci l'input dell'utente utilizzando un'istruzione If.Ecco la casella di messaggio Sì/No in pratica:
123456789101112 Sub MsgBoxVariable()Dim risposta come numero interorisposta = MsgBox("Vuoi continuare?", vbQuestion + vbYesNo)Se risposta = vbSì AlloraMsgBox "Sì"AltroMsgBox "No"Finisci seFine sottotitolo

VBA If, ElseIf, Else in Access VBA

Le funzioni If, ElseIf e Else funzionano esattamente allo stesso modo in Access VBA come in Excel VBA.

È possibile utilizzare un'istruzione If per verificare se sono presenti record in un Recordset.

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

wave wave wave wave wave