Šī apmācība izskaidros, kā izmantot IIF VBA
Funkcija VBA IIF ir līdzīga IF funkcijas izmantošanai programmā Excel. Tas pārbauda, vai nosacījums ir izpildīts, atgriežot vienu vērtību (vai aprēķinu), ja tā ir TRUE, citu vērtību (vai aprēķinu), ja tā ir FALSE.
Tas ir līdzīgs paziņojumam VBA If, daudzi uzskata, ka šīs metodes izmantošana ir īsceļš, jo, lai iegūtu vēlamo rezultātu, jums ir jāraksta tikai viena koda rinda, nevis jāizmanto Ja… Tad… Citādi… Beigas Ja rutīna. Tomēr tas ir jāizmanto pareizi, jo tas var radīt problēmas jūsu kodā.
IIF sintakse
Funkcija IFF sastāv no 3 daļām - loģiskā testa, patiesās daļas un viltus daļas.
- Izteiksme:Loģiskais tests, kam jānotiek.
- Patiesā daļa: Rezultāts, kas tiks atgriezts, ja loģiskais tests būs PATIESS.
- Nepatiesa daļa: Rezultāts, kas tiks atgriezts, ja loģiskais tests būs FALSE.
IIF funkciju procedūras rakstīšana
123 | Funkcija GetNames (strName As String) Kā virkneGetNames = IIf (strName = "Jānis", "Vārds ir Jānis", "Vārds nav Jānis")Beigu funkcija |
Iepriekš minētajā funkcijā mēs varam izmantot apakšprocedūru, lai pārbaudītu, vai mainīgais, ko mēs nododam funkcijai, ir virkne “Jānis”
123 | ApakštestsGetNamaes ()MsgBox GetNames ("Jānis")Beigu apakš |
Ja mēs izpildītu apakšprocedūru TestGetNames, tā izsauktu funkciju GetNames un atgrieztu ziņojumu lodziņu.
Ja tā vietā būtu izmantojis metodi If, kods izskatītos šādi:
1234567 | Funkcija GetNames (strName As String) Kā virkneJa (strName = "Jānis") TadGetNames = "Vārds ir Jānis"CitādiGetNames = "Vārds nav Jānis"Beigas JaBeigu funkcija |
Mēs esam efektīvi uzrakstījuši vienu koda rindu, nevis 5 koda rindas - iespaidīgi!
Kāpēc izmantot If?
Apsveriet sekojošo
123 | Funkcija GetNames (strName As String) Kā virkneGetNames = IIf (strName = "Jānis", MsgBox ("Vārds ir Jānis"), MsgBox ("Vārds nav Jānis")Beigu funkcija |
Tagad, ja izpildāt šo apakšprocedūru, lai izsauktu savu funkciju
123 | Sub TestGetNames ()GetNames ("Jānis")Beigu apakš |
Jūs saņemtu tādu pašu ziņojumu lodziņu kā iepriekš, bet tad tūlīt pēc tam - jūs saņemtu nākamo ziņojumu lodziņu!
Funkcija IIF izpilda koda rindas sadaļas TRUE un FALSE - tā neiziet no koda, tiklīdz konstatējusi, ka nosacījums ir patiess - tā joprojām izpilda arī viltus sadaļu, tādējādi sniedzot mums nepatiesu ziņojumu otrais ziņojumu lodziņš. Ja jūs būtu izmantojisJa… Tad… Citādi… Beigas Ja - tas nebūtu noticis - IF funkcija izpilda tikai koda sadaļu TRUE vai FALSE atkarībā no loģikas, kas tiek nodota kodam.
Kods ir slikti izstrādāts (ar nolūku!), Un ziņojumu lodziņi tiek turēti koda rindiņā, kurā ir ieslēgts IIF priekšraksts, nevis pēc koda vai apakšprogrammā. Tā kā IIF funkcija izpilda paziņojuma sadaļas TRUE un FALSE, tiek atgriezti abi ziņojumi.
Mēs varētu novērst šo kļūdu, pārvietojot ziņojumu lodziņu zem IIF funkciju rindas, kā norādīts zemāk esošajā kodā, vai pārvietojot ziņojumu lodziņu uz apakšprocedūru, kā norādīts šajā rakstā.
1234 | Funkcija GetNames (strName As String) Kā virkneGetNames = IIf (strName = "Jānis", "Vārds ir Jānis", "Vārds nav Jānis")MsgBox (GetNames)Beigu funkcija |
Ja esat uzmanīgs, rakstot kodu, IIF funkcija var ietaupīt daudzas koda rindas un papildu rakstīšanu!
Ligzdoti IIF
Mēs varam ligzdot IIF funkciju līdzīgi kā IF funkciju, bet atkal viss tiek darīts vienā rindā.
123 | Funkcija GetDiscount (dblPrice As Double) Kā DoubleGetDiscount = IIf (dblPrice> = 500, 10, IIf (dblCena> = 250, 5, IIf (dblCena> = 100, 2,5, 0)))Beigu funkcija |
Pēc tam mēs varētu izsaukt šo funkciju no apakšprocedūras
12345 | Sub FindDiscount ()Dim dblP Kā dubultādblP = 899MsgBox ("Atlaide, ko varat saņemt" & GetDiscount (dblP) & "%")Beigu apakš |
vai arī varat to izsaukt no Excel, izmantojot to kā UDF (lietotāja definēta funkcija)