VBA IIF funkcija

Š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)

Padėsite svetainės plėtrą, dalintis puslapį su draugais

wave wave wave wave wave