VBA Select Case Statement

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

Tulet auttaa kehittämään sivuston jakaminen sivu ystävillesi

wave wave wave wave wave