SELECT CASE yapısının incelenmesi

Select Case aslında basit bir şekilde ifade edecek olursak if-elseif yapısının bir başka versiyonudur diyebiliriz, elbette küçük kullanım farkları ile. Öncelikle bu yapıyı genelde bir değişkenin değeri değerlendirirken tercih ediyoruz. Daha önce C ya da kodlama düzeni olarak C türevi olan programlama dillerini C++, C#, php, Java vb. kullanan arkdaşlarımın alışageldikleri switch() yapısı Select Caseyapısının karşılığıdır. Bunu kullanmak yerine if-elseif ile de aynı işlemleri gerçekleştirebilirsiniz hatta if-elseif yapısı için daha az makine çevrimi gerçekleştirildiği muhakkaktır diyebiliriz. Ancak kullanım kolaylığı dikkate alındığında da Select Case gözardı edilemeyecek bir yapıdır. bu yapıyı if-else şart yapısından ayıran en önemli özellik OR (veya) operatörü kullanımına izin verirken AND (ve) operatörü kullanımına izin vermeyişidir. Şimdi Select Case yapısının kullanımına kısaca bir gözatalım.

Select Case kontrolDeğişkeni
case durum1:
        durum1 ' eşit ise yapılacak işlemler
case durum2:
        durum2 ' e eşit iseyapılacak işlemler
case durum3,durum4,durum5:
       durum3 ya da durum4 veya durum5 doğru olduğunda yapılacak işlemler
case durum6 to durum7:
        durum6 ile durum7 arasında ise yapılacak işlemler
case is > durum8:
        durum8 den büyük ise yapılacak işlemler
case else:
        yukarıda verilenlerin hiç biri gerçekleşmediğinde yapılacak işlemler
End Select

Yukarıda verilen genel kullanım yapısını gerçek kodlar üzerinde göremdiğiniz sürece bir işe yaramayacaktır.İşin aslı burada sizlere örnek olarak yazacağım kodlar aslında kod kalabalığı olmasına rağmen öğrenmeniz üzerinde etkili olacaktır. Çünkü faraziyelerle işler yürümüyor.Şimdi laf kalabalığını bırakalım bir kaç örnek yazalım

Örnek-1
'Alt+F11 ile (Ofis-2003) ekrana gelen kod penceresinde Ctrl+R ile ekrana gelen Project Explorer penceresini kullanarak eklenen modüle aşağıda verilen kodlar yazıldıktan sonra Sayfa1 çalışma sayfasında B1 hücresine =rakamlariOku(A1) yazarak kullanırsanız A1 hücresindeki sayı 0-9 arasında ise rakam yazıya dönüştürülürken bu aralık dışındaki her türlü sayısal değer için de "0-9 ARASINDA DEGER GIRINIZ" mesajını alırsınız.
Function rakamlariOku(deger As Byte) As String
Select Case deger
Case 0:
rakamlariOku = "SIFIR"
Case 1:
rakamlariOku = "BİR"
Case 2:
rakamlariOku = "İKİ"
Case 3:
rakamlariOku = "ÜÇ"
Case 4:
rakamlariOku = "DÖRT"
Case 5:
rakamlariOku = "BEŞ"
Case 6:
rakamlariOku = "ALTI"
Case 7:
rakamlariOku = "YEDİ"
Case 8:
rakamlariOku = "SEKİZ"
Case 9:
rakamlariOku = "DOKUZ"
Case Else
rakamlariOku = "0-9 ARASINDA DEGER GIRINIZ"
End Select
End Function


Örnek-2
'Örnek-1 anlatılan yöntemle eklenen modüle aşağıda verilen kodlar yazıldıktan sonra Sayfa1 çalışma sayfasında B1 hücresine =karakterEsdegeri(A1) yazarak kullanırsanız yazdığınız bu fonksiyon A1 hücresindeki tek harf aşağıda irdelenen Türkçe karakterlerden biri ise bunun yerine İngiliz alfabesindeki karşılığını değilse null (hiçbir şey) döndürecektir.
Function karakterEsdegeri(karakter As String) As String
Select Case karakter
Case "ı":
karakterEsdegeri = "i"
Case "İ":
karakterEsdegeri = "I"
Case "ş":
karakterEsdegeri = "s"
Case "Ş":
karakterEsdegeri = "S"
Case "ç":
karakterEsdegeri = "c"
Case "Ç":
karakterEsdegeri = "C"
Case "ğ":
karakterEsdegeri = "g"
Case "Ğ":
karakterEsdegeri = "G"
Case "ö":
karakterEsdegeri = "o"
Case "Ö":
karakterEsdegeri = "O"
Case "ü":
karakterEsdegeri = "u"
Case "Ü":
karakterEsdegeri = "U"
Case Else
karakterEsdegeri = ""
End Select
End Function


Örnek-3
'Aşağıda verilen kodlar çalışma sayfasına eklenen bir modüle yazıldıktan sonra Sayfa1 çalışma sayfasında B1 hücresine =durum(A1) yazarak kullanırsanız yazdığınız bu fonksiyon A1 hücresindeki sayı 1-25 arasında ise aşağıda verilen şartlara uygun değerlerden birini değilse "Aralık dışı değer girişi" bilgisini döndürür...
Function durum(deger As byte) As String
Select Case deger
Case 1 To 5
durum = "1-5 arasında bir değer"
Case 6 To 10, 15 To 25
durum = "6-10 ya da 15 ile 25 arasında bir değer"
Case 11, 12, 13, 14
durum = "11-14 arasında bir değer"
Case Is > 25
durum = "25 den büyük bir deger"
Case Else
durum = "Aralık dışı değer girişi"
End Select
End Select
End Function


Örnek-4
'Örnek-1 de verdiğimiz kodu her ne kadar ilkel de olsa 3 basamaklı sayıları okuyacak şekilde yeniden tasarlayalım. Burada mid() fonksiyonu kullanılmıştır ki daha sonra standart String() fonksiyonları işlenirken ele alınacaktır lakin basitçe anlatmak gerekirse, mid(deger,başlangıç,karakterSayisi) deger ile verilen string datanın içinden baçlangıç ile verilen karakterden başlayarak karakterSayisi ile verilen tane karakter alır. Misal:
Dim adi As String
adi="Mehmet Akif Ersoy"
msgbox(mid(adi,8,4))

Ekrana Akif mesajını görüntüler (Boşluk da bir karakterdir sakın yanılmayın...)

Function rakamlariOku(deger As String) As String
Dim uzunluk As Byte
Dim sonuc As String
If deger = "" Then
rakamlariOku = ""
Exit Function ' ne olur ne olmaz bos deger gelirse fonksiyon sonlandirilsin
End If
uzunluk = Len(deger)
If uzunluk = 1 Then
Select Case deger
Case 0:
sonuc = "SIFIR"
Case 1:
sonuc = "BİR"
Case 2:
sonuc = "İKİ"
Case 3:
sonuc = "ÜÇ"
Case 4:
sonuc = "DÖRT"
Case 5:
sonuc = "BEŞ"
Case 6:
sonuc = "ALTI"
Case 7:
sonuc = "YEDİ"
Case 8:
sonuc = "SEKİZ"
Case 9:
sonuc = "DOKUZ"
End Select
ElseIf uzunluk = 2 Then
Select Case Mid(deger, 2, 1)
Case 0:
sonuc = ""
Case 1:
sonuc = "BİR"
Case 2:
sonuc = "İKİ"
Case 3:
sonuc = "ÜÇ"
Case 4:
sonuc = "DÖRT"
Case 5:
sonuc = "BEŞ"
Case 6:
sonuc = "ALTI"
Case 7:
sonuc = "YEDİ"
Case 8:
sonuc = "SEKİZ"
Case 9:
sonuc = "DOKUZ"
End Select
Select Case Mid(deger, 1, 1)
Case 0:
sonuc = "" & sonuc
Case 1:
sonuc = "on" & sonuc
Case 2:
sonuc = "YİRMİ" & sonuc
Case 3:
sonuc = "OTUZ" & sonuc
Case 4:
sonuc = "KIRK" & sonuc
Case 5:
sonuc = "ELLİ" & sonuc
Case 6:
sonuc = "ATMIŞ" & sonuc
Case 7:
sonuc = "YETMİŞ" & sonuc
Case 8:
sonuc = "SEKSEN" & sonuc
Case 9:
sonuc = "DOKSAN" & sonuc
End Select
ElseIf uzunluk = 3 Then
Select Case Mid(deger, 3, 1)
Case 0:
sonuc = ""
Case 1:
sonuc = "BİR"
Case 2:
sonuc = "İKİ"
Case 3:
sonuc = "ÜÇ"
Case 4:
sonuc = "DÖRT"
Case 5:
sonuc = "BEŞ"
Case 6:
sonuc = "ALTI"
Case 7:
sonuc = "YEDİ"
Case 8:
sonuc = "SEKİZ"
Case 9:
sonuc = "DOKUZ"
End Select
Select Case Mid(deger, 2, 1)
Case 0:
sonuc = "" & sonuc
Case 1:
sonuc = "ON" & sonuc
Case 2:
sonuc = "YİRMİ" & sonuc
Case 3:
sonuc = "OTUZ" & sonuc
Case 4:
sonuc = "KIRK" & sonuc
Case 5:
sonuc = "ELLİ" & sonuc
Case 6:
sonuc = "ATMIŞ" & sonuc
Case 7:
sonuc = "YETMİŞ" & sonuc
Case 8:
sonuc = "SEKSEN" & sonuc
Case 9:
sonuc = "DOKSAN" & sonuc
End Select
Select Case Mid(deger, 1, 1)
Case 0:
sonuc = "" & sonuc
Case 1:
sonuc = "YÜZ" & sonuc
Case 2:
sonuc = "İKİYÜZ" & sonuc
Case 3:
sonuc = "ÜÇYÜZ" & sonuc
Case 4:
sonuc = "DÖRTYÜZ" & sonuc
Case 5:
sonuc = "BEŞYÜZ" & sonuc
Case 6:
sonuc = "ALTIYÜZ" & sonuc
Case 7:
sonuc = "YEDİYÜZ" & sonuc
Case 8:
sonuc = "SEKİZYÜZ" & sonuc
Case 9:
sonuc = "DOKUZYÜZ" & sonuc
End Select
Else
rakamlariOku = ""
End If
rakamlariOku = sonuc
End Function

Şimdilik bu kadar kod safsatası yeter örnek olsun diyerek dolgu mahiyetinde kod yazmanın da bir mantığı yok. Sanıyorum Select Case yapısının nasıl kullanılacağı hakkında bir fikriniz olmuştur...

Yardımcı olması dileğiyle