Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Operaattoreiden Käyttö | VBA Fundamentals
Excel VBA Liiketoiminnan Automaatioon

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ä

  1. 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.
  2. Rakenna yhdistetty viesti: "Monitor Arm is at 18 units (reorder at 10)" käyttäen muuttujia, ei kovakoodattua tekstiä.
Vihje
expand arrow

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 + 10 on ennen koodin suorittamista, jotta tiedät, pitäisikö 18 <= 20 palauttaa True vai False, 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ä 18 ja 10 tulevat varasto- ja reorderLevel-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 sitten MsgBox 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.

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 2

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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ä

  1. 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.
  2. Rakenna yhdistetty viesti: "Monitor Arm is at 18 units (reorder at 10)" käyttäen muuttujia, ei kovakoodattua tekstiä.
Vihje
expand arrow

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 + 10 on ennen koodin suorittamista, jotta tiedät, pitäisikö 18 <= 20 palauttaa True vai False, 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ä 18 ja 10 tulevat varasto- ja reorderLevel-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 sitten MsgBox 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.

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 2
some-alt