Hoe gebruik ik de if-instructie met else in vba?
Als u een geavanceerde VBA-gebruiker wilt zijn, is een IF-instructie een must. En ik geloof dat je het woord IF al kent en het vaak als spreadsheetfunctie gebruikt.
In VBA werkt IF op dezelfde manier. Het basisidee is om een taak uit te voeren wanneer een voorwaarde WAAR is, en anders niets te doen of iets anders te doen. Je kunt zowel eenvoudig als in complexe omstandigheden schrijven.
Voor een beter begrip heb ik het in drie verschillende delen verdeeld.
- Voorzien om te testen.
- Een taak die moet worden uitgevoerd als de voorwaarde WAAR is.
- Een taak die moet worden uitgevoerd als de voorwaarde FALSE is.
Zo ziet het er in het echt uit:
In het bovenstaande voorbeeld is regen een voorwaarde. Als deze voorwaarde WAAR is, zal de jongen zijn paraplu openen en als de voorwaarde ONWAAR is, zal hij zijn hoed dragen. Condities zijn alomtegenwoordig in ons dagelijks leven. Maar laten we nu teruggaan naar onze codeerwereld en deze verkennen.
Syntaxis: VBA IF
We hebben drie verschillende soorten IF-instructies in VBA.
1. ALS-Dan
IF THEN is de eenvoudigste vorm van een IF-instructie. Het enige dat we hoeven te doen is een voorwaarde opgeven die we moeten controleren. Als die voorwaarde WAAR is, wordt er een taak uitgevoerd. Maar als deze voorwaarde ONWAAR is, zal het niets doen en onmiddellijk over de schreef gaan.
Syntaxis
IF condition Then statement[s]
In de bovenstaande syntaxis moeten we een voorwaarde opgeven die moet worden geëvalueerd en een taak die moet worden uitgevoerd als die voorwaarde WAAR is.
Voorbeeld
In het bovenstaande voorbeeld hebben we gecontroleerd of cel A1 de waarde 10 bevat. Als dit het geval is, wordt er in de instructie een berichtvenster weergegeven met het bericht ‘Cel A1 heeft de waarde 10’.
Sub CheckValue() If Range("A1").Value = 10 Then MsgBox ("Cell A1 has value 10") End Sub
2. ALS-dan-anders
U kunt de instructie IF-Then-Else gebruiken als u een specifieke taak wilt uitvoeren als een voorwaarde TRUE is, en een andere taak als een voorwaarde FALSE is.
Syntaxis
IF Condition Then Statement[s] Else Statement[s] End If
Met de bovenstaande syntaxis kunnen we verschillende taken uitvoeren, afhankelijk van het resultaat van een voorwaarde. Als de voorwaarde WAAR is, zal het de verklaring uitvoeren die u vermeldde na “Then” of als de voorwaarde FALSE is, zal het de verklaring uitvoeren die u vermeldde na “Else”.
Voorbeeld
Sub CheckValue() If Range("A1").Value = "10" Then MsgBox ("Cell A1 has value 10") Else MsgBox ("Cell A1 has a value other than 10") End Sub
In het bovenstaande voorbeeld heb ik de IF-Then-Else-instructie gebruikt om de waarde in cel A1 te controleren.
Als cel A1 de waarde 10 heeft, krijgt u een berichtvenster met de tekst “Cel A1 heeft een waarde van 10” en als er een andere waarde in cel A1 staat, krijgt u een berichtvenster met de tekst “De cel A1 heeft een andere waarde dan 10”. Hier kunnen we dus verschillende taken uitvoeren op basis van het conditieresultaat.
3. ALS-dan-Elseif-Anders
Dit is het nuttigste en belangrijkste type IF dat u zal helpen bij het schrijven van geavanceerde conditieverklaringen. Bij dit type kunt u de tweede voorwaarde opgeven nadat u uw eerste voorwaarde heeft geëvalueerd.
Syntaxis
IF Condition Then Statement[s] Elseif Condition Then Statement[s] Else Statement[s] End If
In de bovenstaande syntaxis hebben we:
- Op voorwaarde van evaluatie.
- Een instructie die moet worden uitgevoerd als deze voorwaarde TURE is.
- Als deze voorwaarde ONWAAR is, moeten we de tweede voorwaarde evalueren.
- En als de tweede voorwaarde WAAR is, moeten we een verklaring afleggen.
- Maar als beide voorwaarden, de eerste en de tweede, ONWAAR zijn, zal er een verklaring worden afgelegd die u na ‘Anders’ noemde.
En het beste is dat u een willekeurig aantal “Elseif”s in uw code kunt gebruiken. Dit betekent dat u in uw aangifte een onbeperkt aantal voorwaarden kunt vermelden.
Voorbeeld
Sub check_grade() If Range("A2").Value = "A" Then MsgBox "Very Good" Else If Range("A2").Value = "B" Then MsgBox "Good" ElseIf Range("A2").Value = "C" Then MsgBox "Average" ElseIf Range("A2").Value = "D" Then MsgBox "Poor" ElseIf Range("A2").Value = "E" Then MsgBox "Very Poor" Else MsgBox "Enter Correct Grade" End Sub
In het bovenstaande voorbeeld hebben we een macro geschreven die eerst cel A2 controleert op de waarde “A” en als de cel de beoordeling “A” heeft, retourneert de verklaring het bericht “Zeer goed”.
Deze instructie controleert eerst cel A2 op de waarde “A” en als de cel de beoordeling “A” heeft, retourneert de instructie het bericht “Zeer goed”.
En als de eerste voorwaarde ONWAAR is, zal de tweede voorwaarde worden geëvalueerd en het bericht “Goed” worden geretourneerd als de cel de beoordeling “B” heeft.
En als de tweede voorwaarde onwaar is, gaat deze naar de derde voorwaarde, enzovoort. Als alle vijf de voorwaarden onwaar zijn, zal het uiteindelijk de code uitvoeren die ik na de rest heb geschreven.
Het geheim van het schrijven van een IF-verklaring in VBA
Nu kent u alle soorten IS en kunt u er ook een kiezen, afhankelijk van de taak die u moet uitvoeren. Laat me je een geheim vertellen.
IF-instructie met één regel versus blok-IF-instructie
Je kunt een IF-statement op twee verschillende manieren schrijven en beide hebben voor- en nadelen. Kijk naar.
1. Verklaring van één regel
De verklaring van één regel is perfect als u de IF-Then-instructie gebruikt. De basis voor het gebruik van een line-instructie is het schrijven van al uw code op één regel.
If A1 = 10 Then Msgbox("Cell A1 has value 10")
In de bovenstaande verklaring hebben we een IF-instructie geschreven om te evalueren of cel A1 de waarde 10 heeft. Vervolgens wordt er een berichtvenster weergegeven. De beste praktijk voor het gebruik van een instructie van één regel is wanneer u eenvoudige code moet schrijven. Het gebruik van éénregelige code voor complexe en lange declaraties is moeilijk te begrijpen.
Snelle tip: wanneer u code van één regel schrijft, hoeft u Endif niet te gebruiken om de instructie te voltooien.
2. Blokdeclaratie
Een Block-statement is perfect als je je code op een fatsoenlijke en begrijpelijke manier wilt schrijven. Wanneer u een blokinstructie schrijft, kunt u meerdere regels in uw macro gebruiken, waardoor u nette en schone code krijgt.
Sub check_value() If Range(“A1”).Value = “10” Then MsgBox ("Cell A1 has value 10") Else MsgBox ("Cell A1 has a value other than 10") End If End Sub
In het bovenstaande voorbeeld hebben we een IF-Then-Else-instructie in blokken geschreven. En u kunt zien dat het gemakkelijk te lezen is en zelfs gemakkelijk te debuggen.
Bij het schrijven van complexe instructies (wat je zeker zult doen na het lezen van deze handleiding), zijn blokinstructies altijd goed. En terwijl u geneste If-instructies schrijft, kunt u voor de duidelijkheid ook inspringing in uw regel toevoegen.
Snelle tip – Er is een uitzondering die u kunt negeren door Else aan het einde van uw code te gebruiken wanneer u IF-Then-Elseif-Else gebruikt. Dit is erg handig als u geen enkele taak hoeft uit te voeren terwijl geen van de voorwaarden WAAR is in uw verklaring.
8 concrete voorbeelden
Hier heb ik enkele eenvoudige maar nuttige voorbeelden vermeld die u kunt volgen.
1. Geneste ALS
Het beste deel van de IF-instructie is dat u geneste instructies maakt. U kunt aan de eerste voorwaarde een tweede voorwaarde toevoegen.
Sub NestIF() Dim res As Long res = MsgBox("Do you want to save this file?", vbYesNo, "Save File") If res = vbYes Then 'start of first IF statement If ActiveWorkbook.Saved <> True Then 'start of second IF statement. ActiveWorkbook.SaveMsgBox ("Workbook Saved") Else MsgBox "This workbook is already saved" End If 'end of second IF statement Else MsgBox "Make Sure to save it later" End If ' end of first IF statement End Sub
In het bovenstaande voorbeeld hebben we een geneste IF-instructie gebruikt. Wanneer u deze macro uitvoert , krijgt u een berichtvenster met de opties OK en Annuleren. Het werk van de voorwaardelijke verklaring begint daarna.
Eerst wordt de knop geëvalueerd waarop u hebt geklikt. Als u op “Ja” hebt geklikt, nest het dan om te evalueren of uw spreadsheet is opgeslagen of niet.
Als uw werkmap niet is opgeslagen, wordt deze opgeslagen en ontvangt u een bericht. En als de werkmap al is opgeslagen, wordt er een bericht over weergegeven.
Maar als u op de knop klikt, is de voorwaarde van de eerste macro FALSE en krijgt u pas later een bericht om uw boek op te slaan.
Het basisidee van deze code is dat de tweede voorwaarde volledig afhankelijk is van de eerste voorwaarde. Als de eerste voorwaarde ONWAAR is, wordt de tweede voorwaarde niet geëvalueerd.
Meer informatie over geneste IF
2. Maak een lus met IF en GoTo
Je kunt ook een lus maken met goto met IF. De meeste programmeurs vermijden het schrijven van loops op deze manier omdat we betere manieren hebben om loops te maken . Maar het kan geen kwaad om te leren hoe we het kunnen doen.
Sub auto_open() Alert: If InputBox("Enter Username") <> "Puneet" Then GoTo Alert Else MsgBox "Welcome" End If End Sub
In het bovenstaande voorbeeld hebben we een condition-instructie gebruikt om een lus te maken. We hebben auto_open als macronaam gebruikt, zodat elke keer dat iemand het bestand opent, deze macro wordt uitgevoerd.
De gebruiker moet een gebruikersnaam invoeren en als die gebruikersnaam niet gelijk is aan “Puneet”, wordt de code herhaald en wordt het invoervak opnieuw weergegeven. En als u de juiste tekst invoert, heeft deze toegang tot het bestand.
3. Controleer of een cel een getal bevat
Hier hebben we een voorwaarde gebruikt om te controleren of de actieve cel een numerieke waarde bevat of niet.
Sub check_number() If IsNumeric(Range("B2").Value) Then MsgBox "Yes, active cell has a number." Else MsgBox "No, active cell hasn't a number." End If End Sub
In het bovenstaande voorbeeld heb ik een voorwaarde geschreven met behulp van de isnumerieke functie in VBA, die dezelfde is als de getalfunctie in het werkblad, om te controleren of de waarde van een cel een getal is of niet.
Als de waarde een getal is, retourneert deze WAAR en krijgt u het bericht ‘Ja, de actieve cel heeft een numerieke waarde’. En als de waarde geen getal is, ontvangt u het bericht ‘Geen numerieke waarde in actieve cel’.
4. Gebruik OF en EN met ALS
Met IF OR kunt u twee of meer voorwaarden opgeven en een taak uitvoeren als ten minste één voorwaarde WAAR is.
Sub UsingOR() If Range("A1") < 70 Or Range("B1") < 70 Then MsgBox "You Are Pass" Else If Range("A1") < 40 And Range("B1") < 40 Then MsgBox "You Are Pass" Else MsgBox "You Are Fail" End If End If End Sub
In het bovenstaande voorbeeld, op regel 2, hebben we twee voorwaarden die OR gebruiken. Als een student voor een van de vakken 70 punten behaalt, is het resultaat een “Pass”. En in regel 7 hebben we twee voorwaarden die de AND-operator gebruiken. Indien een student voor beide vakken meer dan 40 punten behaalt, is het resultaat “Pass”.
Met IF AND kunt u meerdere voorwaarden opgeven en een taak uitvoeren als alle voorwaarden WAAR zijn.
5. Gebruik Niet met IF
Door NOT in een voorwaarde te gebruiken, kunt u TRUE in FALSE en FALSE in TRUE veranderen.
Sub IF_Not() If Range(“D1”) <= 40 And Not Range(“E1”) = “E” Then MsgBox "You Are Pass." Else MsgBox "You Are Fail." End If End Sub
In het bovenstaande voorbeeld hebben we NOT in de voorwaarde gebruikt. We hebben twee cellen met de score van het onderwerp. In de ene cel staat de score in cijfers en in een andere cel in cijfers.
- Als een student cijfers boven de 40 heeft voor het eerste vak en boven de E voor het tweede vak, is er sprake van een PASS.
- Als een student cijfers boven de 40 heeft voor het eerste vak en boven de E voor het tweede vak, is hij/zij geslaagd.
Dus elke keer dat de cijfers van een leerling hoger zijn dan 40 en een ander cijfer dan E, ontvangen we het bericht ‘Je bent geslaagd’ of ‘Je bent niet geslaagd’.
6. ALS-aangifte met een selectievakje
Nu gebruiken we hier een selectievakje om een macro uit te voeren.
Sub ship_as_bill() If Range("D15") = True Then Range("D17:D21") = Range("C17:C21") Else If Range(“D15”) = False Then Range("D17:D21").ClearContents Else MsgBox (“Error!”) End If End If End Sub
In het bovenstaande voorbeeld hebben we een IF-instructie gebruikt om de voorwaarde te creëren dat als het selectievakje is ingeschakeld, het bereik D17:D21 gelijk is aan het bereik C17:C21. En als het vakje niet is aangevinkt, is het bereik D17:D21 leeg.
Met deze techniek kunnen we het factuuradres als verzendadres gebruiken en als we nog iets nodig hebben, kunnen we het adres handmatig invoeren.
7. Controleer of een cel is samengevoegd
En hier schrijven we een voorwaarde om een waarschuwing te ontvangen als een actieve cel wordt samengevoegd.
Sub MergeCellCheck() If ActiveCell.MergeCells Then MsgBox "Active Cell Is Merged" Else MsgBox "Active Cell Is Not Merged" End If End Sub
In de bovenstaande code hebben we samengevoegde cellen gebruikt om te controleren of de actieve cel is samengevoegd of niet. Als de actieve cel wordt samengevoegd, retourneert de voorwaarde hiervoor een waarschuwing .
8. Verwijder de hele rij als een cel leeg is
Hier gebruiken we IF om te controleren of een rij leeg is of niet. En als deze regel leeg is, verwijdert de instructie die specifieke regel.
Sub DeleteRow() If Application.CountA(ActiveCell.EntireRow) = 0 Then ActiveCell.EntireRow.Delete Else MsgBox Application.CountA(ActiveCell.EntireRow) & "Cell(s) have values in this row" End If End Sub
In het bovenstaande voorbeeld worden eerst de cellen gecontroleerd die een waarde hebben. Als het aantal cellen met een waarde nul is, verwijdert de voorwaarde de actieve rij, anders wordt de waarschuwing geretourneerd die het aantal cellen met een waarde aangeeft.
Conclusie
Zoals ik al zei, dit is een van de belangrijkste onderdelen van VBA en je moet het leren als je VBA onder de knie wilt krijgen. Met de IF-instructie kunt u zowel eenvoudige als complexe codes schrijven. U kunt ook logische operatoren gebruiken en geneste voorwaarden schrijven.
Ik hoop dat deze gids je helpt betere codes te schrijven.
Vertel me dit nu. Schrijft u regelmatig voorwaarden in VBA? Wat voor soort codes schrijf je? Deel uw mening met mij in het opmerkingengedeelte. En vergeet niet deze gids met je vrienden te delen.