Inhoudsopgave:
Video: 20 Essential Excel Functions with Downloadable Reference Guide 2024
If-Then is de belangrijkste controlestructuur van VBA. U zult deze opdracht waarschijnlijk dagelijks gebruiken. Gebruik de If-Then-structuur wanneer u een of meer instructies voorwaardelijk wilt uitvoeren. Met de optionele Else-component, indien inbegrepen, kunt u een of meer instructies uitvoeren als de voorwaarde die u test niet waar is. Hier is een eenvoudige CheckUser-procedure, opnieuw gecodeerd om de If-Then-Else-structuur te gebruiken:
Sub CheckUser2 () UserName = InputBox ("Voer je naam in:") If UserName = "Satya Nadella" Then MsgBox ("Welcome Satya …") '… [Meer code hier] … Anders MsgBox "Sorry. Alleen Satya Nadella kan dit uitvoeren. "End If End Sub
If-Then examples
De volgende routine demonstreert de If-Then-structuur zonder de optionele Else-clausule:
Sub GreetMe () If Time <0. 5 then MsgBox" Good Morning "End Sub
De GreetMe-procedure gebruikt de VBA-tijdfunctie om de systeemtijd te krijgen. Als de huidige tijd korter is dan. 5 toont de routine een vriendelijke begroeting. Als de tijd groter is dan of gelijk aan. 5, de routine eindigt, en er gebeurt niets.
Om een andere begroeting weer te geven als Tijd groter of gelijk is aan. 5, kunt u na de eerste een andere If-Then-instructie toevoegen:
Sub GreetMe2 () Als tijd = 0. 5 Vervolgens MsgBox "Good Afternoon" End Sub
Merk op dat> = (groter dan of gelijk aan) wordt gebruikt voor de tweede If-Then-instructie. Dit zorgt ervoor dat de hele dag bedekt is. Als> (groter dan) werd gebruikt, zou er geen bericht verschijnen als deze procedure precies om 12.00 uur zou zijn uitgevoerd. Dat is vrij onwaarschijnlijk, maar met een belangrijk programma als dit, wil je geen risico nemen.
Een If-Then-Else-voorbeeld
Een andere benadering van het vorige probleem gebruikt de Else-component. Hier is dezelfde routine gehercodeerd om de If-Then-Else-structuur te gebruiken:
Sub GreetMe3 () Als tijd <0. 5 dan MsgBox "Goedemorgen" Anders _ MsgBox "Goede middag" Einde sub
Merk op dat de lijn vervolg karakter (onderstrepingsteken) wordt gebruikt in het voorgaande voorbeeld. De If-Then-Else-instructie is eigenlijk een enkele verklaring. VBA biedt een enigszins andere manier van coderen If-Then-Else-constructies die een End If-instructie gebruiken. Daarom kan de GreetMe-procedure worden herschreven als
Sub GreetMe4 () Als tijd <0. 5 dan MsgBox "Goedemorgen" Anders MsgBox "Goede namiddag" Einde als eind Sub
In feite kunt u een willekeurig aantal uitspraken invoegen onder de Als deel en een aantal verklaringen onder het Else-onderdeel. Deze syntaxis is gemakkelijker te lezen en maakt de uitspraken korter.
Wat als u de GreetMe-routine moet uitbreiden om drie voorwaarden aan te kunnen: ochtend, middag en avond? U hebt twee opties: gebruik drie If-Then-instructies of gebruik een geneste If-Then-Else-structuur. Nesten betekent het plaatsen van een If-Then-Else-structuur in een andere If-Then-Else-structuur. De eerste benadering, met behulp van drie If-Then-instructies, is eenvoudiger:
Sub GreetMe5 () Dim Msg As String If Time = 0. 5 En Time = 0. 75 Then Msg = "Evening" MsgBox "Good" & Msg End Sub
Er is een nieuwe variant toegevoegd met behulp van een variabele. De variabele Msg krijgt een andere tekstwaarde, afhankelijk van het tijdstip van de dag. De MsgBox-instructie geeft de begroeting weer: Goede morgen, Goede middag of Goede avond.
De volgende routine voert dezelfde actie uit maar gebruikt een If-Then-End If-structuur:
Sub GreetMe6 () Dim Msg As String If Time = 0. 5 And Time = 0. 75 Then Msg = "Evening" End If MsgBox "Good" & Msg End Sub
Using ElseIf
In de voorgaande voorbeelden wordt elke instructie in de routine uitgevoerd. Een iets efficiëntere structuur zou de routine verlaten zodra een voorwaarde waar blijkt te zijn. In de ochtend zou de procedure bijvoorbeeld de Good Morning-boodschap moeten weergeven en vervolgens afsluiten - zonder de andere overtollige voorwaarden te evalueren.
Met een kleine routine zoals deze hoeft u zich geen zorgen te maken over de uitvoeringssnelheid. Maar voor grotere toepassingen waarin snelheid van cruciaal belang is, moet u weten over een andere syntaxis voor de If-Then-structuur.
Zo kunt u de GreetMe-routine herschrijven met behulp van deze syntaxis:
Sub GreetMe7 () Dim Msg As String Als tijd = 0. 5 En Tijd <0. 75 dan Msg = "Middag" Anders Msg = "Avond "End If MsgBox" Good "& Msg End Sub
Wanneer een voorwaarde waar is, voert VBA de voorwaardelijke instructies uit en eindigt de If-structuur. Met andere woorden, deze procedure is een beetje efficiënter dan de vorige voorbeelden. De wisselwerking is dat de code moeilijker te begrijpen is.
Nog een If-then-voorbeeld
Hier is nog een voorbeeld dat de eenvoudige vorm van de If-Then-structuur gebruikt. Met deze procedure wordt de gebruiker om een hoeveelheid gevraagd en vervolgens wordt de juiste korting weergegeven op basis van de hoeveelheid die de gebruiker invoert:
Sub ShowDiscount () Schaduwhoeveelheid als lange-dimbare korting als dubbele hoeveelheid = invoerbox ("Voer hoeveelheid in:") als hoeveelheid > 0 Dan is Korting = 0. 1 Indien Hoeveelheid> = 25 Dan Korting = 0. 15 Indien Hoeveelheid> = 50 Dan Korting = 0. 2 Indien Hoeveelheid> = 75 Dan Korting = 0. 25 MsgBox "Korting:" & Korting Einde Sub
Merk op dat elke If-Then-instructie in deze routine wordt uitgevoerd en dat de waarde voor Korting kan veranderen naarmate de instructies worden uitgevoerd. De routine geeft uiteindelijk echter de juiste waarde voor Korting weer, omdat de If-Then-instructies in volgorde van oplopende kortingswaarden zijn.
De volgende procedure voert dezelfde taken uit door de alternatieve ElseIf-syntaxis te gebruiken. In dit geval eindigt de routine onmiddellijk na het uitvoeren van de instructies voor een echte voorwaarde:
Sub ShowDiscount2 () Schaduwhoeveelheid als lange-dimbare korting als dubbele hoeveelheid = invoerbox ("Voer hoeveelheid in:") als hoeveelheid> 0 en hoeveelheid <25 dan is korting = 0.1 Anders Als hoeveelheid> = 25 en hoeveelheid <50 dan korting = 0. 15 Anders Als hoeveelheid> = 50 en hoeveelheid <75 dan korting = 0. 2 anders Als hoeveelheid> = 75 Dan korting = 0. 25 einde als MsgBox "korting:" & Discount End Sub
Deze meerdere If-Then-structuren zijn nogal omslachtig. Misschien wilt u de If-Then-structuur alleen gebruiken voor eenvoudige binaire beslissingen.