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
- 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.
- Bygg ett sammanfogat meddelande: "Monitor Arm är på 18 enheter (beställ vid 10)" med hjälp av variabler, inte hårdkodad text.
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 + 10blir innan du kör koden, så du vet om18 <= 20ska geTrueellerFalse, 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
18och10i ditt slutliga meddelande ska komma från dina variabler för lagersaldo ochreorderLevel, 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 medMsgBox messageså 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.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal