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