Ehtolauseet
Pyyhkäise näyttääksesi valikon
Kaikki tähän asti on koskenut arvojen tallentamista ja testaamista. Ehdollinen logiikka on kohta, jossa koodisi alkaa tehdä päätöksiä — suorittaa yhden ohjeiston toisen sijaan riippuen siitä, mitä testit palauttavat.
If...Then
Yksinkertaisin muoto: suorita yksi toiminto vain, jos yksi ehto täyttyy.
If currentStock < reorderLevel Then
MsgBox "Reorder needed!"
End If
Jos If-ehto on epätosi, VBA ohittaa suoraan kaiken, mikä tulee End If-rivillä — mitään ei tapahdu eikä virhettä synny.
If...ElseIf...Else
Käsittelee useampia mahdollisia lopputuloksia ketjuttamalla ehtoja:
If currentStock = 0 Then
status = "Out of Stock"
ElseIf currentStock < reorderLevel Then
status = "Reorder Now"
ElseIf currentStock < reorderLevel * 2 Then
status = "Watch Closely"
Else
status = "Healthy"
End If
VBA tarkistaa nämä ylhäältä alas ja pysähtyy ensimmäiseen ehtoon, joka on True — se ei tarkista muita, vaikka myöhempikin ehto olisi teknisesti True. Juuri siksi järjestyksellä on väliä: jos currentStock on 0, ensimmäinen ehto (= 0) nappaa sen ja status on heti "Out of Stock". Huomaa, että 0 on myös teknisesti pienempi kuin reorderLevel, joten jos ElseIf currentStock < reorderLevel olisi ensin, se ilmoittaisi virheellisesti "Reorder Now" tuotteelle, jota ei ole lainkaan varastossa. Tarkimman ja kiireellisimmän ehdon asettaminen ensin — ja laajempien ehtojen käyttäminen vasta myöhemmin — saa tällaisen ketjun toimimaan oikein.
Select Case
Kun tarkistat yhtä muuttujaa useita mahdollisia kiinteitä arvoja vastaan, Select Case ilmaisee saman asian kuin pitkä ElseIf-ketju, mutta on selkeälukuinen:
Select Case category
Case "Electronics"
discountRate = 0.05
Case "Office"
discountRate = 0.1
Case Else
discountRate = 0
End Select
Select Case käsittelee myös lukuvälejä selkeästi, mikä on vaikeampaa lukea ElseIf-vertailujen ketjuna:
Select Case currentStock
Case 0
status = "Out of Stock"
Case 1 To 19
status = "Low"
Case 20 To 49
status = "Adequate"
Case Is >= 50
status = "Well Stocked"
End Select
Case 1 To 19 vastaa mitä tahansa arvoa väliltä 1–19 (molemmat mukaan lukien); Case Is >= 50 käyttää Is-sanaa vertaillakseen testattavaan muuttujaan kiinteän arvon sijaan.
Tehtävä
- Kirjoita
Sub, jossa onSelect Case-lohko (kuten yllä), joka asettaa tilan merkkijonon kovakoodatun varastomäärän perusteella. - Testaa sitä kolme kertaa saman
Sub-rutiinin sisällä vaihtamalla varastoarvoa: kokeile 0, 15 ja 134, tulostaen tulosDebug.Print-komennolla joka kerta. - Lisää neljäs ehto tarkalleen arvolle 20 (Keyboardin tilausraja) ja varmista, mikä Case sen nappaa.
1. Sub-proseduurin kirjoittaminen Select Case -rakenteella
- Määrittele yksi muuttuja varastomäärälle ja toinen tulostekstille (
status). - Anna varastomuuttujalle ensin kovakoodattu arvo (esim.
stockLevel = 0), ja käsittele se sittenSelect Case stockLevel-rakenteella — kopioi samaCase-rakenne kuin kohdassa 2.4 (Case 0,Case 1 To 19,Case 20 To 49,Case Is > 50). - Jokainen
Case-haara asettaa eri tekstiarvon muuttujaanstatus.
2. Kolmen arvon testaaminen yhdessä Subissa
- Et tarvitse kolmea erillistä proseduuria — muuta vain muuttujan arvoa, suorita
Select Case-lohko, tulosta tulos, muuta arvo uudelleen ja suorita toinen kerta, kaikki samanSubin sisällä peräkkäin. - Jokaisen arvon asettamisen jälkeen
Debug.Print statusnäyttää tuloksen Välitön-ikkunassa ilman, että muut testit keskeytyvät ponnahdusikkunoilla.
3. Tapauksen lisääminen tarkalleen arvolle 20
- Palaa kohtaan 2.4 ja tarkastele, missä
Case 1 To 19päättyy jaCase 20 To 49alkaa — toinen näistä sisältää jo arvon 20. - Koska
Select Casepysähtyy ensimmäiseen osumaan, erillisenCase 20-rivin lisääminen vaikuttaa vain, jos sijoitat sen ennen sitä tapausta, joka muuten ottaisi sen. - Suorita koodia arvolla
stockLevel = 20ja tarkista, mikä viesti tulostuu — näin näet, mikäCasesen oikeasti käsitteli, ilman että tarvitsee lisätä mitään uutta.
Sub ClassifyStockLevels()
Dim stockLevel As Integer
Dim status As String
' --- Test 1 ---
stockLevel = 0
Select Case stockLevel
Case 0
status = "Out of Stock"
Case 20
status = "Exactly at Reorder Level"
Case 1 To 19
status = "Low"
Case 20 To 49
status = "Adequate"
Case Is > 50
status = "Well Stocked"
End Select
Debug.Print stockLevel & " -> " & status
' --- Test 2 ---
stockLevel = 15
Select Case stockLevel
Case 0
status = "Out of Stock"
Case 20
status = "Exactly at Reorder Level"
Case 1 To 19
status = "Low"
Case 20 To 49
status = "Adequate"
Case Is > 50
status = "Well Stocked"
End Select
Debug.Print stockLevel & " -> " & status
' --- Test 3 ---
stockLevel = 134
Select Case stockLevel
Case 0
status = "Out of Stock"
Case 20
status = "Exactly at Reorder Level"
Case 1 To 19
status = "Low"
Case 20 To 49
status = "Adequate"
Case Is > 50
status = "Well Stocked"
End Select
Debug.Print stockLevel & " -> " & status
' --- Test 4: exactly 20 ---
stockLevel = 20
Select Case stockLevel
Case 0
status = "Out of Stock"
Case 20
status = "Exactly at Reorder Level"
Case 1 To 19
status = "Low"
Case 20 To 49
status = "Adequate"
Case Is > 50
status = "Well Stocked"
End Select
Debug.Print stockLevel & " -> " & status
End Sub
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme