Funzione VBA IIF

Questo tutorial spiegherà come usare IIF in VBA

La funzione VBA IIF è simile all'utilizzo della funzione SE in Excel. Verifica se una condizione è soddisfatta, restituendo un valore (o calcolo) se VERO, un altro valore (o calcolo) se FALSO.

È simile all'istruzione If di VBA, molti lo considerano una scorciatoia per utilizzare questo metodo poiché è sufficiente scrivere una riga di codice per ottenere il risultato desiderato anziché utilizzare un Se… Allora… Altrimenti… Fine Se routine. Tuttavia, deve essere utilizzato correttamente in quanto può portare a problemi nel codice.

Sintassi IIF

La funzione IFF è composta da 3 parti: il test logico, la parte vera e la parte falsa.

  • Espressione:Il test logico che deve aver luogo.
  • Parte vera: Il risultato che verrà restituito se il test logico è TRUE.
  • parte falsa: Il risultato che verrà restituito se il test logico è FALSE.

Scrivere una procedura per la funzione IIF

123 Funzione GetNames (strName As String) As StringGetNames = IIf(strName = "John", "Il nome è John", "Il nome non è John")Fine funzione

Nella funzione sopra, possiamo usare una sottoprocedura per verificare se la variabile che passiamo alla funzione è la stringa "John"

123 Sub TestGetNamaes()MsgBox GetNames("Giovanni")Fine sottotitolo

Se dovessimo eseguire la procedura secondaria TestGetNames, chiamerebbe la funzione GetNames e restituirebbe una finestra di messaggio.

Se invece avessimo usato il metodo If, il codice sarebbe stato simile a questo:

1234567 Funzione GetNames (strName As String) As StringIf(strName = "John") ThenGetNames = "Il nome è John"AltroGetNames = "Il nome non è John"Finisci seFine funzione

Abbiamo effettivamente scritto una riga di codice invece di 5 righe di codice - impressionante!

Perché usare If invece?

Considera quanto segue

123 Funzione GetNames (strName As String) As StringGetNames = IIf(strName = "John", MsgBox ("Il nome è John"), MsgBox ("Il nome non è John"))Fine funzione

Ora, se esegui la seguente procedura secondaria per chiamare la tua funzione

123 Sub TestGetNames()GetNames ("John")Fine sottotitolo

Otterresti la stessa finestra di messaggio di prima, ma subito dopo otterresti la finestra di messaggio successiva!

La funzione IIF esegue entrambe le sezioni TRUE e FALSE della riga di codice - non esce dal codice una volta che ha trovato la condizione come vera - esegue comunque anche la sezione falsa - dandoci così un messaggio falso nel seconda casella di messaggio. Se avessi usatoSe… Allora… Altrimenti… Fine Se - ciò non si sarebbe verificato - la funzione SE esegue solo la sezione VERO o FALSO del codice - a seconda della logica passata al codice.

Il codice è mal progettato (apposta!) con le finestre di messaggio tenute all'interno della riga di codice su cui si trova l'istruzione IIF anziché dopo il codice o nella subroutine. Poiché la funzione IIF esegue entrambe le sezioni TRUE e FALSE dell'istruzione, vengono restituiti entrambi i messaggi.

Potremmo correggere questo errore spostando la finestra di messaggio sotto la riga della funzione IIF, come nel codice seguente, o spostando la finestra di messaggio nella procedura secondaria come nel primo esempio in questo articolo.

1234 Funzione GetNames (strName As String) As StringGetNames = IIf(strName = "John", "Il nome è John", "Il nome non è John")MsgBox (GetNames)Fine funzione

Se stai attento quando scrivi il codice, la funzione IIF può farti risparmiare molte righe di codice e digitazione extra!

IIF annidati

Possiamo nidificare la funzione IIF in modo simile all'annidamento della funzione IF ma, ancora una volta, tutto viene eseguito in una riga.

123 Funzione GetDiscount (dblPrice As Double) As DoubleGetDiscount = IIf(dblPrice >= 500, 10, IIf(dblPrice >= 250, 5, IIf(dblPrice >= 100, 2.5, 0)))Fine funzione

Potremmo quindi chiamare questa funzione da una procedura secondaria

12345 Sotto TrovaSconto()Dim dblP come doppiodblP = 899MsgBox ("Lo sconto che puoi ottenere è " & GetDiscount(dblP) & "%")Fine sottotitolo

oppure puoi chiamarlo da Excel, usandolo come UDF (funzione definita dall'utente)

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

wave wave wave wave wave