Innehållsförteckning:
Video: IF-formeln i Excel (OM-formeln på svenska) 2024
Om så är VBA: s viktigaste kontrollstruktur. Du brukar använda det här kommandot varje dag. Använd strukturen If-Then när du vill utföra en eller flera uttalanden villkorligt. Den alternativa Else-klausulen, om den ingår, låter dig utföra en eller flera uttalanden om det villkor du testar är inte sant. Här är en enkel CheckUser-procedur, omkodad för att använda If-Then-Else-strukturen:
Sub CheckUser2 () UserName = InputBox ("Ange ditt namn:") Om UserName = "Satya Nadella" Då MsgBox ("Välkommen Satya …") "… [Mer kod här] … Else MsgBox "Förlåt. Endast Satya Nadella kan köra detta. "End If End Sub"
If-Then Examples
Följande rutin visar If-Then-strukturen utan valfri Else-klausul:
Sub GreetMe () Om Time <0. 5 sedan MsgBox "Good Morning" End Sub
GreetMe-proceduren använder VBA: s Time-funktion för att få systemtiden. Om den aktuella tiden är mindre än. 5 visar rutinen en vänlig hälsning. Om tiden är större än eller lika med. 5, rutin slutar, och ingenting händer.
För att visa en annan hälsning om tiden är större än eller lika med. 5, kan du lägga till ett annat If-Then-meddelande efter det första:
Sub GreetMe2 () Om Time = 0. 5 Sedan MsgBox "Good Afternoon" End Sub
Observera att> = (större än eller lika med) används för den andra If-Then-satsen. Detta säkerställer att hela dagen är täckt. Hade> (större än) använts, skulle inget meddelande visas om denna procedur utfördes vid precis 12.00 klockan 12.00. Det är ganska osannolikt, men med ett viktigt program som detta vill du inte ta några chanser.
Ett If-Then-Else-exempel
Ett annat tillvägagångssätt till det föregående problemet använder Else-klausulen. Här är samma rutin som omkodas för att använda If-Then-Else-strukturen:
Sub GreetMe3 () Om Time <0. 5 sedan MsgBox "Good Morning" Else _ MsgBox "Good Afternoon" End Sub
Observera att linjen fortsättningskaraktär (understrykning) används i föregående exempel. If-Then-Else-uttalandet är faktiskt ett enda uttalande. VBA tillhandahåller ett något annorlunda sätt att koda If-Then-Else-konstruktioner som använder ett End If-uttalande. Därför kan GreetMe-proceduren skrivas om som
Sub GreetMe4 () Om Time <0. 5 sedan MsgBox "Good Morning" Else MsgBox "Good Afternoon" slutet Om End Sub
Faktum är att du kan infoga ett antal uttalanden under Om del och eventuellt antal uttalanden under Else delen. Denna syntax är lättare att läsa och gör uttalanden kortare.
Vad händer om du behöver expandera GreetMe rutinen för att hantera tre villkor: morgon, eftermiddag och kväll? Du har två alternativ: Använd tre If-Then-uttalanden eller använd en kapad If-Then-Else-struktur. Nesting betyder att placera en If-Then-Else-struktur inom en annan If-Then-Else-struktur. Det första tillvägagångssättet, med hjälp av tre If-Then-satser, är enklare:
Sub GreetMe5 () Dim Msg As String Om Time = 0. 5 And Time = 0. 75 Sedan Msg = "Evening" MsgBox "Good" & Msg End Sub
En ny vridning tillsattes med hjälp av en variabel. Msg-variabeln får ett annat textvärde beroende på tid på dagen. MsgBox-satsen visar hälsningen: God morgon, god eftermiddag eller god kväll.
Följande rutin utför samma åtgärd men använder en If-Then-End If-struktur:
Sub GreetMe6 () Dim Msg As String Om Time = 0. 5 And Time = 0. 75 Then Msg = "Evening" Avsluta om MsgBox "Good" & Msg End Sub
Använda ElseIf
I de tidigare exemplen exekveras alla uttalanden i rutinen. En något mer effektiv struktur skulle gå ut ur rutinen så snart ett tillstånd har visat sig vara sant. På morgonen, till exempel, bör proceduren visa god morgonmeddelande och sedan avsluta - utan att utvärdera de övriga överflödiga villkoren.
Med en liten rutin så här behöver du inte oroa dig för körhastigheten. Men för större tillämpningar där hastigheten är kritisk bör du veta om en annan syntax för If-Then-strukturen.
Så här kan du skriva om GreetMe-rutinen genom att använda den här syntaxen:
Sub GreetMe7 () Dim Msg As String Om Time = 0. 5 And Time <0. 75 Msg = "Afternoon" Else Msg = "Evening "Sluta om MsgBox" Bra "& Msg avsluta del
När ett villkor är sant utför VBA de villkorliga utsagnen och If-strukturen slutar. Med andra ord är detta förfarande lite effektivare än tidigare exempel. Avvägningen är att koden är svårare att förstå.
Ett annat If-Then example
Här är ett annat exempel som använder den enkla formen av If-Then-strukturen. Denna procedur uppmanar användaren för en mängd och visar sedan lämplig rabatt, baserat på den mängd användaren anger:
Sub ShowDiscount () Dimma Antal Så lång Dim Dimension Som Dubbel Mängd = InputBox ("Ange Mängd:") Om Mängd > 0 Då Rabatt = 0. 1 Om Kvantitet> = 25 Då Rabatt = 0. 15 Om Kvantitet> = 50 Då Rabatt = 0. 2 Om Kvantitet> = 75 Då Rabatt = 0. 25 MsgBox "Rabatt:" & Rabatt Slut Del
Observera att varje If-Then-uttalande i den här rutinen exekveras, och värdet för Rabatt kan ändras när uttalandena exekveras. Rutinen visar emellertid slutligen det korrekta värdet för rabatt eftersom if-then-satsen är i ordning med stigande rabattvärden.
Följande procedur utför samma uppgifter genom att använda den alternativa ElseIf-syntaxen. I det här fallet avslutas rutinen direkt efter att ha genomfört deklarationerna för ett sant tillstånd:
Sub ShowDiscount2 () Dimma Antal Långt Dim Rabatt Som Dubbel Mängd = InputBox ("Ange Mängd:") Om Mängd> 0 Och Mängd <25 sedan rabatt = 0.1 ElseIf Antal> = 25 Och Antal <50 Då Rabatt = 0. 15 ElseIf Antal> = 50 Och Antal <75 Då Rabatt = 0. 2 ElseIf Antal> = 75 Då Rabatt = 0. 25 Avsluta Om MsgBox "Rabatt:" & Rabatt End Sub
Dessa multipla If-Then strukturer är ganska besvärliga. Du kanske vill använda strukturen If-Then bara för enkla binära beslut.