VBA: ssa ,. Valitse tapauslausunto on vaihtoehto Jos-sitten lausunto, jonka avulla voit testata, täyttyvätkö ehdot, suorittamalla kullekin ehdolle tietyn koodin. Valitse lause on parempi kuin If -lause, kun käsiteltäviä ehtoja on useita.
Valitse tapausesimerkki
Tässä esimerkissä kehotetaan käyttäjää valitsemaan YesNoCancel MessageBox ja testataan käyttäjän valitsema vaihtoehto:
1234567891011121314 | Sub Select_Case_Yes_No_Cancel ()Dim nResult nimellä VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Valitse Case nResultKotelo vbKylläMsgBox "Kyllä"Tapaus vbEiMsgBox "Ei"Kotelo vbCancelMsgBox "Peruuta"Lopeta ValitseEnd Sub |
Alla olemme kirjoittaneet vastaavan käyttämällä If -lauseketta. Huomaat, että Case Select Statement sisältää hieman vähemmän kirjoittamista - tämä hyöty vahvistuu, kun testataan useita ehtoja.
12345678910111213 | Ala If_Yes_No_Cancel ()Dim nResult nimellä VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Jos nTulos = vbKylläMsgBox "Kyllä"MuutenJos nResult = vbNo SittenMsgBox "Ei"MuutenJos nResult = vbPeruuta sittenMsgBox "Peruuta"Loppu JosEnd Sub |
Tapausilmoituksen syntaksi
Valitse tapauslausuman syntaksi on seuraava:
12345678910 | Valitse tapaus [Testaa lauseke]Tapaus [ehto 1][Toimi, jos ehto 1 on totta]Tapaus [ehto 2][Toimi, jos ehto 2 on totta]Tapaus [ehto n][Toimi, jos ehto n on totta]Asia Muu[Toimi, jos mikään ei ole totta]Lopeta Valitse |
Missä:
[Testaa lauseke] - Onko arvioitava arvo. Yleensä tämä on muuttuja.
[Toimi, jos ehto n on totta] - Onko vain koodi suoritettava, jos ehto täyttyy (aivan kuten If -lauseessa)
[Ehto n] - Onko ehto testata. Olosuhteita voi testata monella eri tavalla. Keskustelemme niistä alla.
Tapauslauseke suorittaa ENSIMMÄISEN ehdon koodin, jonka todetaan olevan TOSI. Jos mikään ehto ei täyty, koodia ei suoriteta, ellei Else -lauseketta ole lisätty.
Valitse tapauskriteerit
Valitse tapauksia voidaan käyttää sekä numeeristen arvojen että tekstin arviointiin. Ensin keskustelemme siitä, miten Select Case -tapauksia käytetään numeeristen lausekkeiden arvioimiseen.
Tarkka ottelu - numerot
Voit helposti testata tarkan vastaavuuden tapauslausuman avulla:
1 | Tapaus 10 |
tai lisää pilkkuja tarkistaaksesi tarkkoja osumia useilla numeroilla:
1 | Tapaus 20, 30, 40 |
1234567891011121314 | Sub ExactMatch_Numbers ()Dim n kokonaislukunan = CInt (InputBox ("…"))Valitse tapaus nTapaus 10'Jos n on 10, niinTapaus 20, 30, 40'Jos n on 20/30/40, niinAsia Muu'Jos n ei ole 10/20/30/40, niin sittenLopeta ValitseEnd Sub |
Alueet
Voit testata, kuuluuko luku alueelle, kuten:
1 | Asia 55--74 |
Tämä menettely luo opiskelijalle kirjainpistemäärän numeerisen pistemäärän perusteella:
12345678910111213141516171819202122 | Sub Calc_Grade ()Dim Score kokonaislukunaDim LetterGrade merkkijononaPisteet = InputBox ("Anna opiskelijan pisteet")Valitse TaulukkoTapaus 90-100LetterGrade = "A"Tapaus 80-90LetterGrade = "B"Tapaus 70-80LetterGrade = "C"Tapaus 60-70LetterGrade = "D"Asia MuuLetterGrade = "F"Lopeta ValitseMsgBox "Opiskelijan arvosana on:" & LetterGradeEnd Sub |
Voit myös testata alueita Case Isin avulla
Valitse tapaus
1234 | Tapaus on <55'Älä tee mitäänTapaus <= 74MsgBox "Range" |
Muista, että tapauslausunto suorittaa koodin VAIN ensimmäiselle ottelulle.
Tämä menettely laskee opiskelijan arvosanan käyttämällä tapausta tapauksen sijaan.
12345678910111213141516171819202122 | Sub Select_Case_Is_Grade ()Dim Score kokonaislukunaDim LetterGrade merkkijononaPisteet = InputBox ("Anna opiskelijan pisteet")Valitse TaulukkoTapaus on> = 90LetterGrade = "A"Tapaus on> = 80LetterGrade = "B"Tapaus on> = 70LetterGrade = "C"Tapaus on> = 60LetterGrade = "D"Asia MuuLetterGrade = "F"Lopeta ValitseMsgBox "Opiskelijan arvosana on:" & LetterGradeEnd Sub |
Asia Muu
Voit lisätä tapauslausuman loppuun "Case Else" tehdäksesi jotain, jos mitään ehtoja ei täytetä:
1 | Asia Muu |
Katso edellisen koodiesimerkin lopusta, miten Case Elseä voidaan käyttää.
Valitse Kotelo - teksti ja tykkääjä
Toistaiseksi Select Case -esimerkimme ovat toimineet vain numeroiden kanssa. Voit myös käyttää Select Case -lausekkeita tekstin kanssa.
Tarkka haku - teksti
Voit testata, vastaako lauseke täsmälleen seuraavaa lausetta:
1 | Kotelo "Punajuuret" |
Tai käytä pilkkuja testataksesi, vastaako lauseke täsmälleen useampaa kuin yhtä lausetta:
1 | Kotelo "Apple", "Banana", "Orange" |
Kokoonpano näyttää tältä:
12345678910 | Sub ExactMatch_Food ()Valitse tapausalue ("a1"). ArvoKotelo "Punajuuret"MsgBox "Kasvis"Kotelo "Apple", "Banana", "Orange"MsgBox "Hedelmät"Lopeta ValitseEnd Sub |
Isot ja pienet kirjaimet
Oletuksena VBA on kirjainkokoherkkä. Tämä tarkoittaa, että VBA pitää tekstiä erilaisena kuin tekstiä. Voit poistaa kirjainkokoherkkyyden käytöstä lisäämällä vaihtoehto Vertaa tekstiä moduulin yläosaan:
1 | Vaihtoehto Vertaa tekstiä |
Tässä esimerkissä kirjainkokoa ei erotella tekstin käsittelyssä:
123456789101112 | Vaihtoehto Vertaa tekstiäSub ExactMatch_Food ()Valitse tapausalue ("a1"). ArvoKotelo "Punajuuret"MsgBox "Kasvis"Kotelo "Apple", "Banana", "Orange"MsgBox "Hedelmät"Lopeta ValitseEnd Sub |
Asia Tykkää
Like -operaattorin avulla voit tehdä epätarkkoja vertailuja. Jos teksti vastaa, Like palauttaa TOSI, jos se ei vastaa, se antaa FALSE. Tämä tekee Like -operaattorista helpon käyttää If -lausuntoja, mutta se ei toimi yhtä helposti tapauslausumien kanssa.
Case Like - epäonnistunut testi
Seuraava koodi osoittaa, että Like -operaattori ei toimi valitun tapauksen kanssa:
1234567891011 | Sub Select_Case_Like_DoesnotWork ()Hämärä sana merkkijononasana = "KAAKA"Valitse KirjainsanaTapaussana2 Kuten "*C*C*"MsgBox "Hyvä"Asia MuuMsgBox "Ei hyvä"Lopeta ValitseEnd Sub |
Case Like - Oikea tapa
Voimme kuitenkin lisätä TRUE -lausekkeen, jotta Select Statement toimii Like Operaattorin kanssa:
1234567891011 | Sub Select_Case_Like_CorrectWay ()Hämärä sana merkkijononasana = "KAAKA"Valitse Case TrueKirjainsana Kuten "*C*C*"MsgBox "Hyvä"Asia MuuMsgBox "Ei hyvä"Lopeta ValitseEnd Sub |
Kotelo - Colon
Kun käytät tapauslausuntoa, voit lisätä niin monta koodiriviä kuin haluat suorittaa kunkin ehdon kanssa. Jos sinun on kuitenkin suoritettava vain yksi koodirivi. Voit käyttää kaksoispistettä (:) kirjoittaaksesi kaikki samalla rivillä.
Tässä on sama esimerkki oppilasluokasta kuin ennen, paitsi käyttämällä kaksoispistettä koodin lyhentämiseen:
1234567891011121314151617 | Osa Calc_Grade_colon ()Dim Score kokonaislukunaDim LetterGrade merkkijononaPisteet = InputBox ("Anna opiskelijapisteet")Valitse TaulukkoTapaus 90-100: LetterGrade = "A"Tapaus 80-90: LetterGrade = "B"Tapaus 70-80: LetterGrade = "C"Tapaus 60–70: LetterGrade = "D"Muu tapaus: LetterGrade = "F"Lopeta ValitseMsgBox "Opiskelijan arvosana on:" & LetterGradeEnd Sub |
Tapauksen valinta - ja / tai - useita ehtoja
Ja / tai operaattoreiden avulla voit testata muita ehtoja Select Case -kannan kanssa.
Tässä esimerkissä käytämme Select Case -vaihtoehtoa muuttujalla "ikä", mutta haluamme myös testata seksiä. Joten käytämme And Operatoria monimutkaisemman testin suorittamiseen:
123456789101112131415161718 | Osa NestedSelectCase ()Hämärä sukupuoli merkkijononaHimmennettävä kokonaislukunasukupuoli = "mies" tai nainenikä = 15Valitse Tapauksen ikäTapaus on <20 Ja sukupuoli = "mies"Msgbox "Mies alle 20"Tapaus on <20 Ja seksi = "nainen"Viesti "Nainen alle 20"Tapaus on> = 20 Ja sukupuoli = "mies"Msgbox "Mies yli 20"Tapaus on> = 20 Ja sukupuoli = "nainen"Viesti "Nainen yli 20"Lopeta ValitseEnd Sub |
Sisäkkäiset tapauslausunnot
Aivan kuten If -lausunnot, voit liittää tapauslausumat toisiinsa:
123456789101112131415161718192021222324 | Osa NestedSelectCase ()Hämärä sukupuoli merkkijononaDim ikä kokonaislukunasukupuoli = "mies" tai nainenikä = 15Valitse Tapauksen ikäTapaus on <20Valitse tapaus sukupuoliKotelo "mies"MsgBox "Mies alle 20"Kotelo "naaras"MsgBox "Nainen alle 20"Lopeta ValitseTapaus on> = 20 Ja sukupuoli = "nainen"Valitse tapaus sukupuoliKotelo "mies"MsgBox "Mies yli 20"Kotelo "naaras"MsgBox "Nainen yli 20"Lopeta ValitseLopeta ValitseEnd Sub |
Tapausselostus vs. jos lausunto
Mitä enemmän ehtoja testataan, sitä hyödyllisempää tapauslausumaa verrataan If -lausuntoon. Katsotaanpa esimerkkiä.
Tässä on koodi, jota tarvitaan testattaessa, onko laskentataulukon nimi sama kuin joukko arvoja If -lauseen avulla:
12345 | Jos Nimi = "Budjetti" Tai Nimi = "Ennuste" Tai Nimi = "Loppu12" Tai _Name = "Flex" Tai Name = "OtherRatios" Tai Name = "Vertailu" Tai _Name = "BudReview" Tai Name = "P & L_Review" Tai Name = "Other" Sitten'Tee jotainLoppu Jos |
Tässä on sama koodi käyttämällä Select Statementia:
12345 | Valitse tapauksen nimiTapaus "Budget", "Forecast", "Trailing12", "Flex", "OtherRatios", _"Vertailu", "BudReview", "P & L_Review", "Other"'Tee jotainLopeta Valitse |
Näet, että tässä tilanteessa on paljon helpompaa käyttää Select Statementia. Se on huomattavasti vähemmän kirjoittamista ja paljon helpompaa lukea.
VBA Select Case Esimerkkejä
Ex 1. Tapauslauseke Käyttäjän määrittämä toiminto (UDF)
Toistetaan edellä oleva arvosanalaskusesimerkimme ja luodaan UDF opiskelijan pisteiden laskemiseksi:
12345678910111213141516 | Toiminto GetGrade (pisteet kokonaislukuna) merkkijononaValitse TaulukkoTapaus 90-100GetGrade = "A"Tapaus 80-90GetGrade = "B"Tapaus 70-80GetGrade = "C"Tapaus 60--70GetGrade = "D"Asia MuuGetGrade = "F"Lopeta ValitseLopeta toiminto |
Nyt voimme käyttää toimintoa GetGrade Excel -laskentataulukossamme oppilasarvioiden nopeaan laskemiseen:
Esimerkki 2. Testilomakkeen nimi / silmukkakotelo
Tämä koodi kiertää kaikki työkirjan laskentataulukot, suojaamattomat taulukot, jotka täyttävät tietyt ehdot:
123456789101112 | Sub Case_UnProtectSheet ()Dim ws laskentataulukkonaJokaiselle viikolle laskentataulukoissaValitse Case ws.Name 'Luettelo kaikista taulukkoista, joissa on suhteetTapaus "Budget", "Forecast", "Trailing12", "Flex", "OtherRatios", _"Vertailu", "BudReview", "P & L_Review", "Other"ws. suojaaLopeta ValitseSeuraava wsEnd Sub |
Esimerkki 3. Valitse Tapaus - Solun arvo
Tämä esimerkki testaa opiskelijan pisteet solussa antamalla kirjainarvosanan suoraan oikealla olevaan soluun.
12345678910111213141516 | Sub TestCellValue ()Himmennä solu alueenaAseta solu = alue ("C1")Valitse Case cell.ValueTapaus 90-100solu.Siirto (0, 1) = "A"Tapaus 80-90solu.Siirto (0, 1) = "B"Tapaus 70-80solu.Siirto (0, 1) = "C"Tapaus 60-80solu.Siirto (0, 1) = "D"Lopeta ValitseEnd Sub |
Esimerkki 4. Valitse tapaus - päivämäärät
Tämä tapauksen valinta -esimerkki on toiminto, joka testaa, mihin neljännekseen päivämäärä kuuluu.
123456789101112131415161718 | Alatestin päivämäärä ()MsgBox GetQuarter (CDate ("20.7.2019"))End SubToiminto GetQuarter (dt kuin päivämäärä) kokonaislukunaDim sht kuten laskentataulukkoValitse Tapaus dtAsia CDate ("01/01/2019") CDateen ("03/31/2019")GetQuarter = 1Asia CDate ("04/01/2019") CDateen ("06/30/2019")GetQuarter = 2Asia CDate ("07/01/2019") CDateen ("09/30/2019")GetQuarter = 3Asia CDate ("10/01/2019") CDateen ("31.12.2019")GetQuarter = 4Lopeta ValitseLopeta toiminto |
Koska se on funktio, voit käyttää sitä Excelin funktiona:
Esim. 5 Tarkista, onko numero pariton vai parillinen
Tämä esimerkki testaa, onko luku pariton vai parillinen.
123456789101112 | Sub CheckOddEven ()Dim n kokonaislukunan = InputBox ("Anna numero")Valitse Case n Mod 2Tapaus 0MsgBox "Luku on parillinen."Tapaus 1MsgBox "Luku on pariton."Lopeta ValitseEnd Sub |
Esim. 6 Testaa, onko päivämäärä viikonpäivä vai viikonloppu
Näillä esimerkeillä testataan, onko päivämäärä arkipäivä vai viikonloppu.
123456789101112131415161718192021 | Alitarkistusviikonpäivä ()Dim dt päivämääränädt = CDate ("1/1/2020")Valitse tapausviikonpäivä (dt)Tapaus vbMaanantaiMsgBox "On maanantai"Tapaus vbTiistaiMsgBox "On tiistai"Tapaus vbKeskiviikkoMsgBox "On keskiviikko"Tapaus vbTorstaiMsgBox "On torstai"Tapaus vbPerjantaiMsgBox "On perjantai"Tapaus vbLauantaiMsgBox "On lauantai"Tapaus vbSunnuntaiMsgBox "On sunnuntai"Lopeta ValitseEnd Sub |
123456789101112 | Alitarkistusviikko ()Dim dt päivämääränädt = CDate ("1/1/2020")Valitse tapausviikonpäivä (dt)Tapaus vbSaturday, vbSundayMsgBox "On viikonloppu"Asia MuuMsgBox "Ei ole viikonloppu"Lopeta ValitseEnd Sub |
VBA Valitse tapaus Accessissa
Kaikki yllä olevat esimerkit toimivat täsmälleen samalla tavalla Access VBA: ssa kuin Excel VBA: ssa.
123456789101112131415161718192021 | Sub TestCellValue ()Dim dbs tietokannanaHimmennä ensin RecordSetAseta dbs = CurrentDBAseta rst = dbs.OpenRecordset ("tblClients", dbOpenDynaset)Ensimmäisen kanssa.MoveFirst.MuokataValitse Tapaus rst.Fields ("Kaupunki")Tapaus "Austin".rst.Fields ("TelCode") = "512"Kotelo "Chicago".rst.Fields ("TelCode") = "312"Kotelo "New YorK".rst.Fields ("TelCode") = "1212"Kotelo "San Fransisco".rst.Fields ("TelCode") = "415"Lopeta Valitse.PäivittääLopetaLoppu Sus |