Operaattoreiden Käyttö
Pyyhkäise näyttääksesi valikon
Muuttujien määrittely antaa sinulle paikan arvojen tallentamiseen. Operaattorit ovat keino yhdistää, vertailla ja testata näitä arvoja — eli ilmaista liiketoimintasääntöjä koodissa. "Onko varasto alle tilausrajan?" on vertailuoperaattori. "Tilaa lisää, jos varasto on vähissä JA tuote on Elektroniikka" on looginen operaattori.
Aritmeettiset operaattorit
Suurin osa näistä toimii täsmälleen kuten laskimessa, mutta VBA:ssa on kaksi jakolaskuoperaattoria, jotka tekevät aidosti eri asioita:
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
Kenoviiva (\) ja Mod ovat ne kaksi, jotka usein hämmentävät, koska ne näyttävät samankaltaisilta mutta vastaavat päinvastaisiin kysymyksiin. 100 \ 3 vastaa kysymykseen "kuinka monta kokonaista kertaa 3 menee 100:aan?" — vastaus on 33, ja loput jätetään pois. 100 Mod 3 vastaa peilikuvaan: "paljonko jää jäljelle, kun 3 menee 100:aan niin monta kertaa kuin mahdollista?" — vastaus on 1. Yhdessä 33 kolmen ryhmää ja jäännös 1 muodostavat 100 — tämä ei ole sattumaa, vaan juuri tätä varten nämä kaksi operaattoria on suunniteltu. Tätä paria käytetään esimerkiksi laskettaessa "kuinka monta täyttä kolmen laatikkoa voin pakata ja montako yksikköä jää vajaaseen laatikkoon?" tai tarkistettaessa, onko rivinumero parillinen (i Mod 2 = 0).
Vertailuoperaattorit
Nämä palauttavat True tai False:
44 > 30 ' True
44 = 44 ' True
"Office" = "office" ' False — VBA's default string comparison IS case-sensitive
44 <> 30 ' True (not equal)
Loogiset operaattorit
Nämä yhdistävät kaksi tai useampia vertailuja yhdeksi True/False-tulokseksi — juuri näin moniehtoista liiketoimintasääntöä ilmaistaan:
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 vaatii, että kaikki sillä yhdistetyt ehdot ovat True, jotta koko lauseke on True — ensimmäinen esimerkki toteutuu vain Elektroniikka-tuotteille, joilla varasto on oikeasti vähissä, ei kaikille vähävarastoisille tuotteille riippumatta kategoriasta. Or vaatii vain yhden ehdon olevan True, mikä on tapa tarkistaa, kuuluuko arvo pieneen hyväksyttävien arvojen joukkoon. Not kääntää True/False-tuloksen päinvastaiseksi — sitä käytetään usein, kuten kolmannessa esimerkissä, ilmaisemaan sääntö muodossa "EI huono ehto", kun se on luettavampi kuin hyvän ehdon suora toteaminen.
Merkkijonojen yhdistäminen
Yhdistää tekstiä &-merkillä (ei +, jonka VBA varaa numeroille):
Dim message As String
message = "Product: " & productName & " | Stock: " & currentStock
' Product: Wireless Mouse | Stock: 134
Huomaa, että currentStock on numero (134), ei tekstiä, mutta se yhdistyy merkkijonoon ilman muunnosta — VBA muuntaa numeron automaattisesti tekstiksi, kun käytät &-operaattoria. Tämä kätevyys on syy, miksi & on suositeltavampi kuin + tekstin yhdistämiseen: jos kirjoittaisit "Stock: " + currentStock, VBA yrittäisi tulkita koko lausekkeen laskutoimituksena ja joko antaisi virheen tai tuottaisi hämmentävän tuloksen tilanteesta riippuen. & tarkoittaa aina "yhdistä tekstinä", ilman epäselvyyttä.
Tehtävä
- Käyttäen Monitor Arm -tuotteen tietoja (Price 89.99, Stock 18, Reorder Level 10), kirjoita lauseke, joka tarkistaa, onko varasto pienempi tai yhtä suuri kuin tilausraja plus 10 — eli "lähestyy rajaa" -varoitus, ei vielä varsinainen hälytys.
- Rakenna yhdistetty viesti: "Monitor Arm is at 18 units (reorder at 10)" käyttäen muuttujia, ei kovakoodattua tekstiä.
1. "Lähestytään rajaa" -lauseke
- Tarvitset ensin kolme muuttujaa: yhden varastomäärälle (18), yhden tilausrajan tasolle (10) ja sitten lausekkeen, joka vertaa näitä kahta.
- "Pienempi tai yhtä suuri kuin" on yksi vertailuoperaattori
<=. - Ilmaus "tilausraja plus 10" tarkoittaa, että et vertaa varastoa suoraan lukuun 10 — vaan laskettuun arvoon. Kirjoita yhteenlasku suoraan vertailuun:
stock <= reorderLevel + 10. - Näet tuloksen asettamalla sen esimerkiksi
Boolean-muuttujaan. - Laske käsin, mitä
10 + 10on ennen koodin suorittamista, jotta tiedät, pitäisikö18 <= 20palauttaaTruevaiFalse, ja tarkista, että koodisi antaa saman tuloksen.
2. Viestin rakentaminen
- Operaattori, joka yhdistää tekstiä, on
&, ei+. - Tarkastele tavoiteviestiä osa kerrallaan:
"Monitor Arm is at "+ (varastomäärä) +" units (reorder at "+ (tilausraja) +")". Laske osat — niitä on viisi, vuorotellen lainausmerkeissä olevaa tekstiä ja muuttujaa. - Tehtävässä sanotaan "käytä muuttujia, ei kovakoodattua tekstiä" — eli lopullisessa viestissä
18ja10tulevat varasto- jareorderLevel-muuttujista, eivät suoraan tekstin sisään kirjoitettuina lukuina. - Numeron yhdistäminen
&-operaattorilla ei vaadi muunnosta — VBA muuttaa sen automaattisesti tekstiksi, joten voit liittää numeerisen muuttujan suoraan merkkijonoon. - Rakenna viesti ensin yhteen
String-muuttujaan (message = ...), ja näytä se sittenMsgBox message-komennolla, jotta voit tarkistaa, että tulos vastaa odotettua, mukaan lukien sulut ja välilyönnit.
Tai käytä seuraavaa koodia
Avaa Section_2_VBA_Fundamentals.xlsm, paina Alt+F11 ja käytä sitä moduulia, jossa olet työskennellyt tämän työkirjan kanssa (lisää uusi kohdasta Insert → Module, jos sinulla ei vielä ole — samaan tapaan kuin modIntro kohdassa 1, voit nimetä sen 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
Klikkaa missä tahansa Sub-rungon sisällä ja paina F5. Näet kaksi viesti-ikkunaa peräkkäin — ensin True (koska 18 ≤ 20), sitten lauseen.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Operaattoreiden Käyttö
Muuttujien määrittely antaa sinulle paikan arvojen tallentamiseen. Operaattorit ovat keino yhdistää, vertailla ja testata näitä arvoja — eli ilmaista liiketoimintasääntöjä koodissa. "Onko varasto alle tilausrajan?" on vertailuoperaattori. "Tilaa lisää, jos varasto on vähissä JA tuote on Elektroniikka" on looginen operaattori.
Aritmeettiset operaattorit
Suurin osa näistä toimii täsmälleen kuten laskimessa, mutta VBA:ssa on kaksi jakolaskuoperaattoria, jotka tekevät aidosti eri asioita:
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
Kenoviiva (\) ja Mod ovat ne kaksi, jotka usein hämmentävät, koska ne näyttävät samankaltaisilta mutta vastaavat päinvastaisiin kysymyksiin. 100 \ 3 vastaa kysymykseen "kuinka monta kokonaista kertaa 3 menee 100:aan?" — vastaus on 33, ja loput jätetään pois. 100 Mod 3 vastaa peilikuvaan: "paljonko jää jäljelle, kun 3 menee 100:aan niin monta kertaa kuin mahdollista?" — vastaus on 1. Yhdessä 33 kolmen ryhmää ja jäännös 1 muodostavat 100 — tämä ei ole sattumaa, vaan juuri tätä varten nämä kaksi operaattoria on suunniteltu. Tätä paria käytetään esimerkiksi laskettaessa "kuinka monta täyttä kolmen laatikkoa voin pakata ja montako yksikköä jää vajaaseen laatikkoon?" tai tarkistettaessa, onko rivinumero parillinen (i Mod 2 = 0).
Vertailuoperaattorit
Nämä palauttavat True tai False:
44 > 30 ' True
44 = 44 ' True
"Office" = "office" ' False — VBA's default string comparison IS case-sensitive
44 <> 30 ' True (not equal)
Loogiset operaattorit
Nämä yhdistävät kaksi tai useampia vertailuja yhdeksi True/False-tulokseksi — juuri näin moniehtoista liiketoimintasääntöä ilmaistaan:
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 vaatii, että kaikki sillä yhdistetyt ehdot ovat True, jotta koko lauseke on True — ensimmäinen esimerkki toteutuu vain Elektroniikka-tuotteille, joilla varasto on oikeasti vähissä, ei kaikille vähävarastoisille tuotteille riippumatta kategoriasta. Or vaatii vain yhden ehdon olevan True, mikä on tapa tarkistaa, kuuluuko arvo pieneen hyväksyttävien arvojen joukkoon. Not kääntää True/False-tuloksen päinvastaiseksi — sitä käytetään usein, kuten kolmannessa esimerkissä, ilmaisemaan sääntö muodossa "EI huono ehto", kun se on luettavampi kuin hyvän ehdon suora toteaminen.
Merkkijonojen yhdistäminen
Yhdistää tekstiä &-merkillä (ei +, jonka VBA varaa numeroille):
Dim message As String
message = "Product: " & productName & " | Stock: " & currentStock
' Product: Wireless Mouse | Stock: 134
Huomaa, että currentStock on numero (134), ei tekstiä, mutta se yhdistyy merkkijonoon ilman muunnosta — VBA muuntaa numeron automaattisesti tekstiksi, kun käytät &-operaattoria. Tämä kätevyys on syy, miksi & on suositeltavampi kuin + tekstin yhdistämiseen: jos kirjoittaisit "Stock: " + currentStock, VBA yrittäisi tulkita koko lausekkeen laskutoimituksena ja joko antaisi virheen tai tuottaisi hämmentävän tuloksen tilanteesta riippuen. & tarkoittaa aina "yhdistä tekstinä", ilman epäselvyyttä.
Tehtävä
- Käyttäen Monitor Arm -tuotteen tietoja (Price 89.99, Stock 18, Reorder Level 10), kirjoita lauseke, joka tarkistaa, onko varasto pienempi tai yhtä suuri kuin tilausraja plus 10 — eli "lähestyy rajaa" -varoitus, ei vielä varsinainen hälytys.
- Rakenna yhdistetty viesti: "Monitor Arm is at 18 units (reorder at 10)" käyttäen muuttujia, ei kovakoodattua tekstiä.
1. "Lähestytään rajaa" -lauseke
- Tarvitset ensin kolme muuttujaa: yhden varastomäärälle (18), yhden tilausrajan tasolle (10) ja sitten lausekkeen, joka vertaa näitä kahta.
- "Pienempi tai yhtä suuri kuin" on yksi vertailuoperaattori
<=. - Ilmaus "tilausraja plus 10" tarkoittaa, että et vertaa varastoa suoraan lukuun 10 — vaan laskettuun arvoon. Kirjoita yhteenlasku suoraan vertailuun:
stock <= reorderLevel + 10. - Näet tuloksen asettamalla sen esimerkiksi
Boolean-muuttujaan. - Laske käsin, mitä
10 + 10on ennen koodin suorittamista, jotta tiedät, pitäisikö18 <= 20palauttaaTruevaiFalse, ja tarkista, että koodisi antaa saman tuloksen.
2. Viestin rakentaminen
- Operaattori, joka yhdistää tekstiä, on
&, ei+. - Tarkastele tavoiteviestiä osa kerrallaan:
"Monitor Arm is at "+ (varastomäärä) +" units (reorder at "+ (tilausraja) +")". Laske osat — niitä on viisi, vuorotellen lainausmerkeissä olevaa tekstiä ja muuttujaa. - Tehtävässä sanotaan "käytä muuttujia, ei kovakoodattua tekstiä" — eli lopullisessa viestissä
18ja10tulevat varasto- jareorderLevel-muuttujista, eivät suoraan tekstin sisään kirjoitettuina lukuina. - Numeron yhdistäminen
&-operaattorilla ei vaadi muunnosta — VBA muuttaa sen automaattisesti tekstiksi, joten voit liittää numeerisen muuttujan suoraan merkkijonoon. - Rakenna viesti ensin yhteen
String-muuttujaan (message = ...), ja näytä se sittenMsgBox message-komennolla, jotta voit tarkistaa, että tulos vastaa odotettua, mukaan lukien sulut ja välilyönnit.
Tai käytä seuraavaa koodia
Avaa Section_2_VBA_Fundamentals.xlsm, paina Alt+F11 ja käytä sitä moduulia, jossa olet työskennellyt tämän työkirjan kanssa (lisää uusi kohdasta Insert → Module, jos sinulla ei vielä ole — samaan tapaan kuin modIntro kohdassa 1, voit nimetä sen 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
Klikkaa missä tahansa Sub-rungon sisällä ja paina F5. Näet kaksi viesti-ikkunaa peräkkäin — ensin True (koska 18 ≤ 20), sitten lauseen.
Kiitos palautteestasi!