Ši pamoka paaiškins, kaip naudoti IIF VBA
Funkcija VBA IIF yra panaši į „IF“ funkcijos naudojimą „Excel“. Jis tikrina, ar įvykdyta sąlyga, grąžina vieną vertę (arba skaičiavimą), jei ji yra TIESA, kitą vertę (arba skaičiavimą), jei ji yra NETEISINGA.
Tai panašu į „VBA If“ teiginį, daugelis mano, kad tai yra nuoroda į šio metodo naudojimą, nes norėdami gauti norimą rezultatą turite parašyti tik vieną kodo eilutę, o ne naudoti Jei … Tada … Kita … Pabaiga Jei rutina. Tačiau jį reikia naudoti teisingai, nes tai gali sukelti problemų su kodu.
IIF sintaksė
IFF funkciją sudaro 3 dalys - loginis testas, tikroji dalis ir klaidinga dalis.
- Išraiška:Loginis testas, kuris turi įvykti.
- Tikra dalis: Rezultatas, kuris bus grąžintas, jei loginis testas bus TIKRAS.
- Klaidinga dalis: Rezultatas, kuris bus grąžintas, jei loginis testas yra FALSE.
IIF funkcijų tvarkos rašymas
123 | Funkcija „GetNames“ („strName As String“) kaip eilutėGetNames = IIf (strName = "Jonas", "Vardas yra Jonas", "Vardas nėra Jonas")Pabaigos funkcija |
Aukščiau esančioje funkcijoje galime naudoti papildomą procedūrą, kad patikrintume, ar kintamasis, kurį perduodame funkcijai, yra eilutė „Jonas“
123 | SubtestasGetNamaes ()„MsgBox GetNames“ („Jonas“)Pabaiga Sub |
Jei vykdytume antrinę procedūrą „TestGetNames“, ji iškviestų funkciją „GetNames“ ir grąžintų pranešimų laukelį.
Jei vietoj to būtume naudoję „If“ metodą, kodas atrodytų taip:
1234567 | Funkcija „GetNames“ („strName As String“) kaip eilutėJei (strName = "Jonas") TadaGetNames = "Vardas yra Jonas"KitasGetNames = "Vardas nėra Jonas"Pabaiga JeiPabaigos funkcija |
Efektyviai parašėme vieną kodo eilutę, o ne 5 kodo eilutes - įspūdinga!
Kodėl verta naudoti „If“?
Apsvarstykite šiuos dalykus
123 | Funkcija „GetNames“ („strName As String“) kaip eilutėGetNames = IIf (strName = "John", MsgBox ("The name is John"), MsgBox ("The name is not John")Pabaigos funkcija |
Dabar, jei vykdysite šią papildomą procedūrą, kad iškviestumėte savo funkciją
123 | Sub TestGetNames ()„GetNames“ („Jonas“)Pabaiga Sub |
Jūs gautumėte tą patį pranešimų laukelį kaip ir anksčiau, bet tada iškart po to - gautumėte kitą pranešimų laukelį!
Funkcija IIF vykdo kodo eilutės skyrius TRUE ir FALSE - ji neišeina iš kodo, kai nustato, kad sąlyga yra teisinga - ji vis tiek vykdo klaidingą skyrių, taip pateikdama mums klaidingą pranešimą antra pranešimų dėžutė. Jei būtumėte naudojęJei … Tada … Kita … Pabaiga Jei - to nebūtų buvę - IF funkcija atlieka tik kodo skiltį TRUE arba FALSE, priklausomai nuo kodui perduodamos logikos.
Kodas yra prastai suplanuotas (tyčia!), O pranešimų langeliai laikomi toje kodo eilutėje, kurioje įjungtas IIF sakinys, o ne po kodo arba papildomoje programoje. Kadangi IIF funkcija vykdo teiginio TRUE ir FALSE skyrius, abu pranešimai grąžinami.
Šią klaidą galėtume ištaisyti perkeldami pranešimų laukelį į žemiau IIF funkcijų eilutės, kaip nurodyta toliau esančiame kode, arba perkeliant pranešimų laukelį į antrinę procedūrą, kaip nurodyta pirmame šio straipsnio pavyzdyje.
1234 | Funkcija „GetNames“ („strName As String“) kaip eilutėGetNames = IIf (strName = "Jonas", "Vardas yra Jonas", "Vardas nėra Jonas")„MsgBox“ („GetNames“)Pabaigos funkcija |
Jei būsite atsargūs rašydami kodą, IIF funkcija gali sutaupyti daug kodo eilučių ir papildomai rašyti!
Įdėti IIF
Mes galime įdėti IIF funkciją panašiai kaip IF funkciją, tačiau dar kartą viskas daroma vienoje eilutėje.
123 | Funkcija „GetDiscount“ („dblPrice As Double“) „Dviguba“Gauti nuolaidą = IIf (dblPrice> = 500, 10, IIf (dblPrice> = 250, 5, IIf (dblPrice> = 100, 2,5, 0)))Pabaigos funkcija |
Tada šią funkciją galėtume pavadinti iš papildomos procedūros
12345 | Sub FindDiscount ()Dim dblP Kaip dvigubasdblP = 899„MsgBox“ („Nuolaida, kurią galite gauti“ ir „GetDiscount“ (dblP) ir „%“)Pabaiga Sub |
arba galite jį paskambinti iš „Excel“, naudodami jį kaip UDF (vartotojo apibrėžta funkcija)