Deze tutorial laat je zien hoe je geneste If-statements in VBA gebruikt
Als u met instructies kunt testen op een enkele voorwaarde in VBA om te zien of de voorwaarde waar of onwaar is, en afhankelijk van het antwoord, zal de code in de richting van de ware of de valse verklaring bewegen.
Een enkele IF-verklaring
1234567891011 | SubtestAlsDim x als geheel getalx = 10Als x = 10 dan'als x 10 is, is de voorwaarde waar'MsgBox x is 10"Anders'als x geen 10 is, is de voorwaarde onwaar'Berichtbox "x is geen 10"Stop alsEinde sub |
Geneste IF's uitgelegd
Met een geneste If kunt u meerdere voorwaarden BINNEN elk van de True en/of False statements van de originele If plaatsen.
1234567891011121314151617181920212223242526 | SubtestNestedIf()Dim x als geheel getalDim y als geheel getalDim z als geheel getalx = 10y = 9z = 8Als x = 10 dan'als x 10 is, is de voorwaarde waar, dus test voor yAls y = 8 danMsgBox "y is 9"Anders'als y niet 10 is, is de voorwaarde onwaar'Msgbox "y is geen 9"Stop alsAnders'als x geen 10 is, dan is de voorwaarde onwaar, dus laten we testen op zAls z = 8danMsgBox "z is 8"Anders'als z geen 8 is, is de voorwaarde onwaar'Msgbox "z is geen 10"Stop als'another End If is nodig om het origineel te sluiten ifStop alsEinde sub |
Uw code inspringen wanneer u deze schrijft, is altijd een goede gewoonte, omdat het de code gemakkelijk te lezen en te volgen maakt wanneer u er op een bepaald moment op terug moet komen, of wanneer een andere programmeur deze moet lezen.
We kunnen ook een door de gebruiker ontworpen functie (UDF) maken en de waarden van sommige cellen uit Excel in de functie oproepen met behulp van parameters.
1234567891011121314151617181920 | Functie GetIf(x als geheel getal, y als geheel getal, z als geheel getal) als tekenreeksAls x = 10 dan'als x 10 is, is de voorwaarde waar, dus test voor yAls y = 8 danGetIf = "y is 9"Anders'als y niet 10 is, is de voorwaarde onwaar'GetIf="y is geen 9"Stop alsAnders'als x geen 10 is, dan is de voorwaarde onwaar, dus laten we testen op zAls z = 8 danGetIf="z is 8"Anders'als z geen 8 is, is de voorwaarde onwaar'GetIf="z is geen 10"Stop als'another End If is nodig om het origineel te sluiten ifStop alsFunctie beëindigen |
Genest als praktisch voorbeeld
Denk aan de volgende functie:
12345678910111213141516171819202122 | Functie GetDiscount (dblPrice As Double) As DoubleAls dblPrijs >= 1000 Dan'Als de prijs hoger is dan 1000, wijs een korting toe'Als dblPrijs >= 2000 Dan'indien groter dan 2000, 10% korting geven'GetDiscount = dblPrijs * 0.1Anders'anders 5% korting geven'GetDiscount = dblPrijs * 0.05Stop als'als de prijs niet hoger is dan 1000Anders'indien groter dan 500, geef 2,5% korting'Als dblPrijs >= 500 DanGetDiscount = dblPrijs * 0.025Anders'anders geen korting'GetKorting = 0Stop als'another End If is nodig om het origineel te sluiten ifStop alsFunctie beëindigen |
Met behulp van deze functie in een Excel-sheet kunnen we testen om de totale prijs voor een bestelling te zien en verschillende kortingen toepassen, afhankelijk van dat totaal.
VBA-programmering | Code Generator werkt voor u!
ElseIf . gebruiken
ElseIf stelt ons in staat om uw code te vereenvoudigen, omdat deze alleen naar de tweede if-instructie wordt verplaatst als de eerste een false retourneert.
12345678910111213141516 | Functie GetDiscount (dblPrice As Double) As Double'gebruik else als je minder code hoeft te schrijven'Als dblPrijs >= 2000 DanGetDiscount = dblPrijs * 0.1ElseIf dblPrijs >= 1000 DanGetDiscount = dblPrijs * 0.075ElseIf dblPrijs >= 500 DanGetDiscount = dblPrijs * 0.05ElseIf dblPrijs >= 200 DanGetDiscount = dblPrijs * 0.025ElseIf dblPrijs >= 100 DanGetDiscount = dblPrijs * 0.01AndersGetKorting = 0Stop alsFunctie beëindigen |
Een casusverklaring gebruiken
We kunnen ook een Case Statement gebruiken om hetzelfde effect te bereiken.
1234567891011121314151617 | Functie GetDiscount (dblPrice As Double) As DoubleSelecteer Case dblPrijs'deze casus heeft 6 verschillende kortingsniveaus'Geval is >= 2000GetDiscount = dblPrijs * 0.1Geval is >= 1000GetDiscount = dblPrijs * 0.075Geval is >= 500GetDiscount = dblPrijs * 0.05Kast is >= 200GetDiscount = dblPrijs * 0.025Geval is >= 100GetDiscount = dblPrijs * 0.01Geval AndersGetKorting = 0Einde SelecterenFunctie beëindigen |