VBA Select Case Statement

VBA'da, Vaka İfadesini Seçin için bir alternatiftir If-Then ifadesi, koşulların karşılanıp karşılanmadığını test etmenize olanak tanır, her koşul için özel kod çalıştırır. İşlenecek birden fazla koşul olduğunda, If İfadesine göre Select İfadesi tercih edilir.

Vaka Seç Örnek

Bu örnek, kullanıcıya bir YesNoCancel MessageBox ile sorar ve kullanıcının hangi seçeneği seçtiğini test eder:

1234567891011121314 Alt Select_Case_Yes_No_Cancel()Dim nResult As VbMsgBoxResultnResult = MsgBox("… ", vbYesNoCancel)Vaka Seçin nResultVaka vbYesMsgBox "Evet"Vaka vbNoMsgBox "Hayır"Vaka vbİptalMsgBox "İptal"Seçimi BitirAlt Bitiş

Aşağıda bunun yerine bir If İfadesi kullanarak eşdeğerini yazdık. Case Select Statement'ın biraz daha az yazmayı gerektirdiğini fark edeceksiniz - bu avantaj, birden fazla kriter test edilirken güçlendirilir.

12345678910111213 Alt If_Yes_No_Cancel()Dim nResult As VbMsgBoxResultnResult = MsgBox("… ", vbYesNoCancel)nResult = vbYes iseMsgBox "Evet"ElseIf nResult = vbNo SonraMsgBox "Hayır"ElseIf nResult = vbCancel O zamanMsgBox "İptal"BitirAlt Bitiş

Vaka İfadesi Sözdizimi

Select Case Statement sözdizimi aşağıdaki gibidir:

12345678910 Vaka Seçin [Test İfadesi]Vaka [Koşul 1][Koşul 1 doğruysa yapılacak işlem]Vaka [Durum 2][Koşul 2 doğruysa yapılacak işlem]Vaka [Koşul n][Koşul n doğruysa yapılacak işlem]Durum Başka[Hiçbiri doğru değilse yapılacak işlem]Seçimi Bitir

Nereye:

[Test İfadesi] - Değerlendirilecek değerdir. Genellikle bu bir değişkendir.

[Koşul n doğruysa yapılacak işlem] - Yalnızca koşul karşılandığında çalıştırılacak kod mu (tıpkı If İfadesinde olduğu gibi)

[Koşul n] - Test edilecek koşuldur. Koşulları test etmenin birçok farklı yolu vardır. Bunları aşağıda tartışacağız.

Case Statement, DOĞRU olarak bulunan İLK koşulun kodunu yürütecektir. Hiçbir koşul karşılanmazsa, Else yan tümcesi eklenmedikçe hiçbir kod yürütülmez.

Vaka Kriterlerini Seçin

Select Cases, hem sayısal değerleri hem de metni değerlendirmek için kullanılabilir. İlk olarak, sayısal ifadeleri değerlendirmek için Select Cases'in nasıl kullanılacağını tartışacağız.

Tam Eşleşme - Sayılar

Bir Vaka Bildirimi ile tam eşleşmeyi kolayca test edebilirsiniz:

1 Vaka 10

veya birden çok sayıyla tam eşleşmeyi test etmek için virgül ekleyin:

1 Durum 20, 30, 40
1234567891011121314 Alt ExactMatch_Numbers()Tamsayı Olarak Dim nn = CInt(InputBox("… "))Durum n'yi seçinVaka 10' n 10 ise O zamanDurum 20, 30, 40' n 20/30/40 ise O zamanDurum Başka' n 10/20/30/40 değilse O zamanSeçimi BitirAlt Bitiş

Aralıklar

Bir sayının aşağıdaki gibi bir aralığa girip girmediğini test edebilirsiniz:

1 Durum 55 ila 74

Bu prosedür, bir öğrenci için sayısal puanlarına göre bir harf puanı oluşturacaktır:

12345678910111213141516171819202122 Alt Calc_Grade()Tam Sayı Olarak Skor SkoruDim LetterGrade As StringPuan = InputBox("Öğrenci Puanını Girin")Vaka Skorunu SeçinVaka 90 ila 100LetterGrade = "A"Durum 80 ila 90LetterGrade = "B"Durum 70 ila 80LetterGrade = "C"Vaka 60 ila 70LetterGrade = "D"Durum BaşkaLetterGrade = "F"Seçimi BitirMsgBox "Öğrencinin Notu: " & LetterGradeAlt Bitiş

Ayrıca Case Is ile aralıkları test edebilirsiniz.

Durum Seçin

1234 Vaka < 55'Hiçbir şey yapmaVaka <= 74MsgBox "Aralıkta"

Vaka Bildiriminin yalnızca SADECE ilk eşleşme için kod yürüteceğini unutmayın.

Bu prosedür, Case To yerine Case Is kullanarak bir öğrencinin notunu hesaplayacaktır.

12345678910111213141516171819202122 Alt Select_Case_Is_Grade()Tam Sayı Olarak Skor SkoruDim LetterGrade As StringPuan = InputBox("Öğrenci Puanını Girin")Vaka Skorunu SeçinVaka >= 90LetterGrade = "A"Vaka >= 80LetterGrade = "B"Vaka >= 70LetterGrade = "C"Vaka >= 60LetterGrade = "D"Durum BaşkaLetterGrade = "F"Seçimi BitirMsgBox "Öğrencinin Notu: " & LetterGradeAlt Bitiş

Durum Başka

Hiçbir koşul karşılanmadıysa bir şeyler yapmak için Vaka Açıklamanızın sonuna “Başka Bir Durum” ekleyebilirsiniz:

1 Durum Başka

Case Else'ın nasıl kullanılabileceğini görmek için önceki kod örneğinin sonuna bakın.

Vaka Seç - Metin ve Benzer Operatör

Şimdiye kadar Select Case örneklerimiz sadece sayılarla çalıştı. Ayrıca Select Case deyimlerini metinle de kullanabilirsiniz.

Tam Eşleşme - Metin

İfadenin tam olarak şuna benzer bir ifadeyle eşleşip eşleşmediğini test edebilirsiniz:

1 "Pancar" vakası

Veya ifadenin birden fazla ifadeyle tam olarak eşleşip eşleşmediğini test etmek için virgül kullanın:

1 Durum "Elma", "Muz", "Portakal"

Bir araya getirmek şöyle görünür:

12345678910 Alt ExactMatch_Food()Case Range("a1") seçin.Value"Pancar" vakasıMsgBox "Sebze"Durum "Elma", "Muz", "Portakal"MsgBox "Meyve"Seçimi BitirAlt Bitiş

Büyük ve küçük harf

Varsayılan olarak, VBA Büyük/küçük harfe duyarlıdır. Bu, VBA'nın "Metin"i "metin"den farklı olarak değerlendirdiği anlamına gelir. Büyük/küçük harf duyarlılığını kapatmak için, modülünüzün en üstüne Metni Karşılaştır Seçeneği ekleyin:

1 Seçenek Metni Karşılaştır

Bu örnek, metinle çalışırken Büyük/Küçük Harf Seçimini büyük/küçük harfe duyarsız hale getirecektir:

123456789101112 Seçenek Metni KarşılaştırAlt ExactMatch_Food()Case Range("a1") seçin.Value"Pancar" vakasıMsgBox "Sebze"Durum "Elma", "Muz", "Portakal"MsgBox "Meyve"Seçimi BitirAlt Bitiş

Vaka Gibi

Like Operatörü, tam olmayan karşılaştırmalar yapmanızı sağlar. Metin eşleşirse Beğen DOĞRU, eşleşmezse YANLIŞ döndürür. Bu, Like operatörünün If İfadeleri ile kullanımını kolaylaştırır, ancak Vaka İfadeleri ile bu kadar kolay çalışmayacaktır.

Durum Gibi - Başarısız Bir Test

Aşağıdaki kod, Like Operator öğesinin Select Case ile çalışmadığını gösterir:

1234567891011 Alt Select_Case_Like_DoesnotWork()Dize olarak kelimeyi karartkelime = "KOKOA"Vaka kelimesini seçinVaka word2 "*C*C*" gibiMsgBox "İyi"Durum BaşkaMsgBox "İyi Değil"Seçimi BitirAlt Bitiş

Case Like - Doğru Yol

Ancak Select İfadesinin Like Operator ile çalışmasını sağlamak için TRUE ifadesini ekleyebiliriz:

1234567891011 Alt Select_Case_Like_CorrectWay()Dize olarak kelimeyi karartkelime = "KOKOA"Büyük/Küçük Harf SeçinVaka kelimesi "*C*C*" gibiMsgBox "İyi"Durum BaşkaMsgBox "İyi Değil"Seçimi BitirAlt Bitiş

Vaka - Kolon

Vaka Bildirimi kullanırken, her koşulda çalıştırmak istediğiniz kadar kod satırı ekleyebilirsiniz. Ancak, yalnızca bir kod satırı çalıştırmanız gerekiyorsa. Her şeyi aynı satıra yazmak için iki nokta üst üste ( : ) kullanabilirsiniz.

Kodu kısaltmak için iki nokta üst üste kullanmak dışında, daha önce olduğu gibi aynı öğrenci notu örneği:

1234567891011121314151617 Alt Calc_Grade_colon()Tam Sayı Olarak Skor SkoruDim LetterGrade As StringPuan = InputBox("Öğrenci Puanını Girin")Vaka Skorunu SeçinVaka 90 - 100: LetterGrade = "A"Durum 80 ila 90: LetterGrade = "B"Durum 70 ila 80: LetterGrade = "C"Durum 60 ila 70: LetterGrade = "D"Başka Durum: LetterGrade = "F"Seçimi BitirMsgBox "Öğrencinin Notu: " & LetterGradeAlt Bitiş

Vaka Seçimi - Ve / Veya - Çoklu Koşullar

Select Case ile birlikte ek kriterleri test etmek için Ve / Veya Operatörlerini kullanabilirsiniz.

Bu örnekte, 'yaş' değişkeninde bir Select Case kullanıyoruz, ancak aynı zamanda cinsiyeti de test etmek istiyoruz. Bu nedenle, daha karmaşık testi gerçekleştirmek için And Operatörünü kullanıyoruz:

123456789101112131415161718 Alt NestedSelectCase()Dize olarak loş seksTamsayı olarak karartma yaşıcinsiyet = "erkek" ' veya kadınyaş = 15Vaka yaşı seçinVaka < 20 Ve cinsiyet = "erkek"Msgbox "20 yaş altı erkek"Vaka < 20 Ve cinsiyet = "kadın"Msgbox "20 yaş altı kadın"Vaka >= 20 Ve cinsiyet = "erkek"Msgbox "20 yaş üstü erkek"Vaka >= 20 Ve cinsiyet = "dişi"Msgbox "20 yaş üstü kadın"Seçimi BitirAlt Bitiş

İç İçe Vaka İfadeleri

Tıpkı If İfadeleri gibi, Vaka İfadelerini iç içe yerleştirebilirsiniz:

123456789101112131415161718192021222324 Alt NestedSelectCase()Dize olarak loş seksTamsayı olarak karartma yaşıcinsiyet = "erkek" ' veya kadınyaş = 15Vaka yaşı seçinVaka < 20Vaka cinsiyetini seçin"erkek" vakasıMsgBox "20 yaş altı erkek""kadın" vakasıMsgBox "20 yaş altı kadın"Seçimi BitirVaka >= 20 Ve cinsiyet = "dişi"Vaka cinsiyetini seçin"erkek" vakasıMsgBox "20 yaş üstü erkek""kadın" vakasıMsgBox "20 yaş üstü kadın"Seçimi BitirSeçimi BitirAlt Bitiş

Vaka İfadesi ve If İfadesi

Ne kadar çok koşul test edilirse, Vaka İfadesi bir If İfadesiyle karşılaştırıldığında o kadar kullanışlı olur. Bir örneğe bakalım.

Çalışma sayfası adının If İfadesi kullanarak bir dizi değere eşit olup olmadığını test etmek için gereken kod:

12345 Ad = "Bütçe" Veya Ad = "Tahmin" Veya Ad = "Sondaki12" Veya _Ad = "Esnek" Veya Ad = "Diğer Oranlar" Veya Ad = "Karşılaştırma" Veya _Ad = "BudReview" Veya Ad = "P&L_Review" Veya Ad = "Diğer" Sonra'Bir şey yapBitir

Bunun yerine bir Select İfadesi kullanan aynı kod:

12345 Vaka Adı SeçinDurum "Bütçe", "Tahmin", "Sondaki12", "Esnek", "Diğer Oranlar", _"Karşılaştırma", "BudReview", "P&L_Review", "Diğer"'Bir şey yapSeçimi Bitir

Bu senaryoda Select deyimi kullanmanın çok daha kolay olduğunu görebilirsiniz. Önemli ölçüde daha az yazıyor ve okunması çok daha kolay.

VBA Select Case Örnekleri

Ör 1. Vaka Açıklaması Kullanıcı Tanımlı İşlev (UDF)

Yukarıdaki not hesaplama örneğimizi çoğaltalım ve bir öğrencinin puanını hesaplamak için bir UDF oluşturalım:

12345678910111213141516 İşlev GetGrade(Tamsayı Olarak Puanla) As StringVaka Skorunu SeçinVaka 90 ila 100GetGrade = "A"Durum 80 ila 90GetGrade = "B"Durum 70 ila 80GetGrade = "C"Vaka 60 ila 70GetGrade = "D"Durum BaşkaGetGrade = "F"Seçimi BitirBitiş İşlevi

Artık öğrenci notlarını hızlı bir şekilde hesaplamak için Excel çalışma sayfamızda Function GetGrade'i kullanabiliriz:

Ör 2. Test Sayfası Adı / Döngü Durum Açıklaması

Bu kod, bir çalışma kitabındaki tüm çalışma sayfalarında, belirli kriterleri karşılayan Korumayı Kaldırma sayfalarında dolaşacaktır:

123456789101112 Alt Case_UnProtectSheet()Dim ws As Çalışma SayfasıÇalışma Sayfalarında Her ws içinVaka ws.Name 'Oranlı tüm sayfaların listesi'ni seçinDurum "Bütçe", "Tahmin", "Sondaki12", "Esnek", "Diğer Oranlar", _"Karşılaştırma", "BudReview", "P&L_Review", "Diğer"ws.Korumayı kaldırSeçimi BitirSonrakiAlt Bitiş

Ör 3. Vaka Seç - Hücre Değeri

Bu örnek, bir hücredeki öğrencinin puanını test edecek ve harf notunu doğrudan sağdaki hücreye verecektir.

12345678910111213141516 Alt TestCellValue()Aralık olarak hücreyi karartHücreyi ayarla = Aralık ("C1")Vaka hücresini seçin.DeğerVaka 90 ila 100cell.Offset(0, 1) = "A"Durum 80 ila 90cell.Offset(0, 1) = "B"Durum 70 ila 80cell.Offset(0, 1) = "C"Vaka 60 ila 80cell.Offset(0, 1) = "D"Seçimi BitirAlt Bitiş

Ör 4. Vaka Seç - Tarihler

Bu Case Select örneği, bir tarihin hangi çeyreğin içine düştüğünü test eden bir İşlevdir.

123456789101112131415161718 Alt TestTarihi ()MsgBox GetQuarter(CDate("20/7/2019"))Alt BitişFonksiyon GetQuarter(dt As Date) As IntegerÇalışma Sayfası Olarak Dim shtVaka Seç dtVaka CDate("01/01/2019") CDate'e("31/03/2019")GetQuarter = 1Vaka CDate("04/01/2019") CDate'e("30/06/2019")GetQuarter = 2Case CDate("01/2019") CDate'e("30/09/2019")GetQuarter = 3Vaka CDate("01/01/2019") CDate'e("31/12/2019")GetQuarter = 4Seçimi BitirBitiş İşlevi

Bu bir işlev olduğu için Excel'de bir işlev olarak kullanabilirsiniz:

Eski. 5 Sayının Tek mi Çift mi olduğunu kontrol edin

Bu örnek, bir sayının tek mi çift mi olduğunu test eder.

123456789101112 Alt CheckOddEven()Tamsayı Olarak Dim nn = InputBox("Bir sayı giriniz")Case n Mod 2'yi seçinDurum 0MsgBox "Sayı çifttir."Dava 1MsgBox "Sayı tek."Seçimi BitirAlt Bitiş

Eski. 6 Tarihin Hafta içi veya Hafta Sonu olup olmadığını test edin

Bu örnekler, bir tarihin hafta içi mi yoksa hafta sonu mu olduğunu test edecektir.

123456789101112131415161718192021 Alt CheckWeekDay()Dim dt As Tarihdt = CDate("1/1/2020")Vaka Seç Hafta içi(dt)Case vbPazartesiMsgBox "Bugün Pazartesi"Case vbTuesdayMsgBox "Bugün Salı"Vaka vbÇarşambaMsgBox "Bugün Çarşamba"Case vbPerşembeMsgBox "Bugün Perşembe"Vaka vbCumaMsgBox "Bugün Cuma"Vaka vbCumartesiMsgBox "Bugün Cumartesi"Case vbPazarMsgBox "Bugün Pazar"Seçimi BitirAlt Bitiş
123456789101112 Alt CheckWeekend()Dim dt As Tarihdt = CDate("1/1/2020")Vaka Seç Hafta içi(dt)Durum vbSaturday, vbSundayMsgBox "Hafta sonu"Durum BaşkaMsgBox "Hafta sonu değil"Seçimi BitirAlt Bitiş

Access'te VBA Select Case

Yukarıdaki örneklerin tümü, Access VBA'da Excel VBA'dakiyle tamamen aynı şekilde çalışır.

123456789101112131415161718192021 Alt TestCellValue()Veritabanı olarak Dim dbsÖnce RecordSet olarak karartdbs'yi ayarla = CurrentDBİlk olarak ayarla = dbs.OpenRecordset("tblClients", dbOpenDynaset)ilk ile.Önce Taşı.DüzenlemekCase rst.Fields("Şehir") seçin"Austin" vakası.rst.Fields("TelCode") = "512"Dava "Şikago".rst.Fields("TelCode") = "312"Dava "New York".rst.Fields("TelCode") = "1212"Dava "San Francisco".rst.Fields("TelCode") = "415"Seçimi Bitir.Güncellemeİle bitmekSus'u Bitir
wave wave wave wave wave