Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Arbeta med operatorer | VBA-Grunder
Excel VBA för affärsautomatisering

Arbeta med operatorer

Svep för att visa menyn

Att deklarera variabler ger dig någonstans att lagra värden. Operatorer är hur du kombinerar, jämför och testar dessa värden — vilket egentligen är hur du uttrycker en affärsregel i kod. "Är lagersaldot under beställningsnivån?" är en jämförelseoperator. "Beställ om lagersaldot är lågt OCH produkten är Elektronik" är en logisk operator.

Aritmetiska operatorer

De flesta fungerar precis som du förväntar dig från en miniräknare, men VBA har två divisionsoperatorer som faktiskt gör olika saker:

Dim total As Double
total = 45 * 3      ' multiplication → 135
total = 100 / 3     ' division → 33.33...
total = 100 \ 3     ' integer division → 33 (drops remainder)
total = 100 Mod 3   ' remainder only → 1
total = 2 ^ 3       ' exponent → 8

Backslash (\) och Mod är de två som brukar förvirra, eftersom de ser lika ut men svarar på motsatta frågor. 100 \ 3 svarar på "hur många hela gånger går 3 i 100?" — svaret är 33, och det som blir över kastas bort. 100 Mod 3 svarar på spegelbildsfrågan, "vad blir kvar efter att 3 gått i 100 så många hela gånger som möjligt?" — svaret är 1. Tillsammans blir det 33 grupper om 3 plus en rest på 1, vilket blir 100 — det är ingen slump, det är precis vad dessa två operatorer är designade för att dela upp. Denna kombination används till exempel för att räkna ut "hur många fulla lådor om 3 kan jag packa, och hur många enheter blir kvar för en ofullständig låda?" eller för att kontrollera om ett radnummer är jämnt (i Mod 2 = 0).

Jämförelseoperatorer

Dessa returnerar True eller False:

44 > 30      ' True
44 = 44      ' True
"Office" = "office"   ' False — VBA's default string comparison IS case-sensitive
44 <> 30     ' True (not equal)

Logiska operatorer

Dessa kombinerar två eller fler jämförelser till ett enda True/False-resultat — precis så uttrycks en affärsregel med flera villkor:

If category = "Electronics" And stock < 30 Then
    ' triggers only if BOTH are true
End If
 
If category = "Office" Or category = "Electronics" Then
    ' triggers if EITHER is true
End If
 
If Not (stock < reorderLevel) Then
    ' triggers if stock is NOT below reorder level
End If

And kräver att alla villkor som kopplas ihop med den är True innan hela uttrycket blir True — det första exemplet gäller alltså bara för elektronikprodukter som också verkligen har lågt lagersaldo, inte för alla produkter med lågt saldo oavsett kategori. Or kräver bara att ett villkor är True, vilket används för att kontrollera medlemskap i en liten uppsättning godkända värden. Not vänder helt enkelt ett True/False-resultat till dess motsats — det används ofta, som i det tredje exemplet, för att uttrycka en regel som "INTE det dåliga tillståndet" när det känns mer naturligt än att formulera det goda tillståndet direkt.

Strängkonkatenering

Sammanfogar text med & (inte +, som VBA reserverar för tal):

Dim message As String
message = "Product: " & productName & " | Stock: " & currentStock
' Product: Wireless Mouse | Stock: 134

Observera att currentStock är ett tal (134), inte text, men ändå sammanfogas det i strängen utan någon konvertering — VBA konverterar automatiskt ett tal till dess textrepresentation när du använder & på det. Den bekvämligheten är precis varför & föredras framför + för att sammanfoga text: om du skrev "Stock: " + currentStock skulle VBA försöka tolka hela uttrycket som aritmetik och antingen ge ett felmeddelande eller ett förvirrande resultat, beroende på sammanhang. & betyder alltid "sammanfoga som text," utan tvetydighet.

Uppgift

  1. Använd Monitor Arm-data (Price 89.99, Stock 18, Reorder Level 10), skriv ett uttryck som kontrollerar om lagersaldot är mindre än eller lika med beställningsnivån plus 10 — en "nära gränsen"-varning snarare än en strikt varning.
  2. Bygg ett sammanfogat meddelande: "Monitor Arm är på 18 enheter (beställ vid 10)" med hjälp av variabler, inte hårdkodad text.
Tips
expand arrow

1. Uttrycket "närmar sig"

  • Du behöver först tre variabler: en för lagersaldo (18), en för beställningsnivå (10) och sedan ett uttryck som jämför dem.
  • "Mindre än eller lika med" är en enkel jämförelseoperator <=.
  • Frasen "beställningsnivå plus 10" betyder att du inte jämför lagersaldot direkt mot 10 — du jämför det mot ett uträknat värde. Skriv additionen direkt i jämförelsen: stock <= reorderLevel + 10.
  • För att faktiskt se resultatet, tilldela det till en Boolean-variabel.
  • Räkna ut för hand vad 10 + 10 blir innan du kör koden, så du vet om 18 <= 20 ska ge True eller False, och kontrollera att din kod stämmer.

2. Bygga meddelandet

  • Operatorn som sammanfogar text är &, inte +.
  • Titta på önskat resultat steg för steg: "Monitor Arm is at " + (lagersaldot) + " units (reorder at " + (beställningsnivån) + ")". Räkna delarna — det är fem, som växlar mellan text inom citattecken och en variabel.
  • Uppgiften säger "använd variabler, inte hårdkodad text" — det betyder att 18 och 10 i ditt slutliga meddelande ska komma från dina variabler för lagersaldo och reorderLevel, inte skrivas in som siffror direkt i strängen.
  • När du sammanfogar ett tal med & behövs ingen konvertering — VBA gör om det till text automatiskt, så du kan lägga till en numerisk variabel direkt i strängen.
  • Bygg ihop allt i en String-variabel först (message = ...), och visa det sedan med MsgBox message så du kan kontrollera att det matchar det förväntade resultatet exakt, inklusive parenteser och mellanslag.

Eller använd följande kod

Öppna Section_2_VBA_Fundamentals.xlsm, tryck på Alt+F11 och använd modulen du har arbetat i för denna arbetsbok (infoga en via Infoga → Modul om du inte har någon än — följ samma mönster som modIntro i avsnitt 1, du kan kalla den modFundamentals).

Sub MonitorArmCheck()
    Dim stock As Integer
    Dim reorderLevel As Integer
    Dim isGettingClose As Boolean
    Dim message As String

    stock = 18
    reorderLevel = 10

    ' Part 1 — the "getting close" check
    isGettingClose = stock <= reorderLevel + 10
    MsgBox isGettingClose

    ' Part 2 — the concatenated message
    message = "Monitor Arm is at " & stock & " units (reorder at " & reorderLevel & ")"
    MsgBox message
End Sub

Klicka någonstans i Sub-proceduren och tryck sedan på F5. Du ska se två meddelanderutor dyka upp efter varandra — först True (eftersom 18 ≤ 20), sedan meningen.

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 2

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Avsnitt 2. Kapitel 2
some-alt