Bu siteye giriş yaparak Çerez kullanımını kabul etmiş oluyorsunuz. İşbu sitede; çerez olarak, sadece son giriş tarihiniz ve eğer üye olursanız oturum statünüz tutulacaktır. Bunlar dışında başka hiçbir bilgi tutulmamaktadır. Çerezler için detaylı bilgi için buraya tıklayınız.
ANLADIM

DUYURULAR

Yeni eklenen ve/veya güncellenen sayfaları görmek için buraya tıklayınız.

Güncel ödev ve test listesini görmek için buraya tıklayınız.

Sitede yapılan iyileştirmeAer ve hata düzeltmelerine ait tüm bilgilendirmeleri görmek içinburaya tıklayınız.

Baş
Udemy
Konular
Son
Konular
SelectCase
KosulifadeleriveDonguler
VBAMakro
VBAMakroKoşul ifadeleri ve Döngüler2

Select Case ve Diğer koşullu yapılar

If yapısı tek koşul yapısı değildir. Select Case yapısı başta olmak üzere üç ayrı ifade daha vardır. Bu bölümde de bunlara bakacağız.

Select Case

Kontrol edilen şey en az 3 farklı değer için kontrol ediliyorsa If Then Else yerine Select Case yapısı tercih edilebilir; zira okunuruluk açısından böylesi daha iyi olacaktır. Genel kullanım şekli şöyledir.

Select Case SorgulananŞey
   Case şuysa
      şunu yap
   Case buysa 
      bunu yap
   Case ....
      ....
   Case Else 'Diğer durumlarda da burayı işlet
      ....
End Select

Örneğimizi kompleks durumları da içerecek şekilde yapalım.

Dim sayı as Integer
sayı=Inputbox("Bir sayı girin")

Select Case sayı
   Case Is < 0
      MsgBox "Negatif bir sayı girdiniz"
   Case 1 To 9
      MsgBox "Pozitif bir rakam girdiniz" '0-9 arasındaki herşey rakamdır, 9un üstündekiler rakam değil sayıdır
   Case Is > 0 
      MsgBox "Pozitif bir sayı girdiniz"
   Case 0
      MsgBox "0 girdiniz" '0 da bir rakamdır ama biz onu ayrı ele allaım dedik
   Case Else 
      MsgBox "Lütfen geçerli bir sayı giriniz"
End Select

Gördüğünüz gibi bir değer aralığı için x To y şeklinde, birşeyden küçük/büyük için ise Is > 0 şeklinde yazıyoruz. Birkaç değeri yanyana yazacaksa da "," ile birbirinden ayrırız. Dosya formatına göre uzantı belirlenen aşağıdaki örnekte de bu durumu görüyoruz.

Select Case ActiveWorkbook.FileFormat
	Case "-4143", "-4158", 6, 56 'normal xls, txt, csv veya Excel2007deki 97-2003 xls'i mi
		FileExtStr = ".xls"
	Case 50, 51, 52 'xlsx, xlsb veya xlsm ise
		FileExtStr = ".xlsx"
	Case Else
		MsgBox "Bu dosya formatı bu makronun çalışması için uygun değil. xls, xlsx, xlsb, xlsm, txt veya csv dosyalarıyla çalışmalısınız"
		Exit Sub
End Select		

NOT:En az 3 değer için sorgulama olması durumunda Select Case tercih edilmeli dedik, ancak sorgulanan şey her defasında değişiyorsa yine If Then Else kullanılmalıdır. Ör:

Sub ifmiselectmi()
If a > 10 Then
'şunları yap
ElseIf b > 20 Then
'şunları yap
ElseIf c > 50 Then
'şunları yap
ElseIf d > 100 Then
'şunları yap
Else
'şunları yap
End If
End Sub

Diğer iki koşul yapısı

Choose

1'den başlayıp artarak giden bir sırada ilerleyen bir değer grubu varsa, ve bir değişkene değer atamak istiyorsanız, bunlar için If veya Select Case yapısı kullanmak yerine Choose ifadesinin kullanmak çok daha pratik olacaktr. Genel Syntax'ı şöyledir.

Syntax:Choose(değişken,değer1,değer2,......,değerx)

Bu örnekte değişken=1 değerini alıyorsa dönen değer Değer1, değişken=2 ise dönen değer=Değer2 olur ve bu şekilde ilerler.

Aylar için bu özellik rahatlıkla kullanılabilir. Örneğin, ay isimlerinden oluşan bir klasör grubunuz var diyelim. Kullanıcıya ay ismini girdirmek yerine ay numarasını isteyerek istediğiniz ay adını elde edebilirsiniz.

Sub chooseornek()
Dim ayno As Integer
Dim ayadı As String

ayno = Application.InputBox("ay no giriniz", Type:=1)
ayadı = Choose(ayno, "Ocak", "Şubat", , , , , "Aralık")
'kodların devamı

Debug.Print ayadı

End Sub

Not:Eğer eleman sayısından fazla bir index girilirse null döndürür. Bu örnekte 13 girmek gibi. Tabi ayadı değişkenimiz String tanımlandığı için kod hata alır. Ancak String yerine variant tanımlanırsa Immediate Window'a Null yazdığını görebilirsiniz.

Switch

If Else End If'in tek satır karşılığı nasıl IIF ise, Select Case'in de tek satır versiyonu Switchtir. Genel kullanımı şekli şöyledir:

x=Switch(Şart 1,Sonuç 1,Şart 2,Sonuç 2,....,Şart n,Sonuç n)

Sub switchornek()
kanalkodu = 1
kanaladı = Switch(kanalkodu = 1, "Şube", kanalkodu = 8, "İnternet", kanalkodu = 16, "Mobil")
MsgBox kanaladı

End Sub

Okunurluğu artırmak adına şu şekilde de düzenlenebilir:

Sub switchornek()
  kanalkodu = 1
  kanaladı = Switch(kanalkodu = 1, "Şube", _
  kanalkodu = 8, "İnternet", _
  kanalkodu = 16, "Mobil")
  MsgBox kanaladı
End Sub

TEST SORULARI

Son Sorumuz şuymuş:Bir metindeki tüm noktaları yoketmek istiyorsunuz. Hangi fonksiyonu kullanırdınız?
Soru:

A şıkkı:

B şıkkı:

C şıkkı:

D şıkkı:

Doğru Cevap Etiketler

İlişkili konuyu seç

260017

Label
* Sorulara verilen yanlış cevaplardaki esprili yorumlarım için hoşgörünüze sığınıyorum.
* Test ve Ödevlerdeki bazı detaylar burada anlatılmamış olabilir. Bunları kendiniz araştırıp bulmalısınız.
* Birden çok konuya ait içeriği olan ödevler var. Algoritmik açıdan bakıldığında o an en uygun konuya adreslenmiştir.
Dikkat! Bir soruya cevap verdikten sonra geri dönemezsiniz.
1
0
0
0

Soru No:21. Hangisi hatalı bir kullanımı gösterir?





ÖDEVLER

0
0
ÖdevNo:... Şu an için bu konu için ödev bulunmamaktadır. İletişim menüsünden örnek ödev sorularını bana iletebilirsin.
Çözüme bakın(Başka türlü de çözülebilir tabi, bu benim çözümüm.)




=YORUMLAR ve SORULAR=


DEVİR UYARISI

Herkese merhaba. Hosting maliyetlerinin aşırı artması yüzünden sitemi yakın zamanda(en geç Mayıs 2023) kapatmaya karar vermiştim. Ancak, siteyi yakından takip eden bir arkadaş siteyi devralmak istemiştir. Siteyi, Mayıs ayında kendisine devir etmeye karar verdim. Üyelik bilgilerini bana güvenerek girdiğiniz için, hepsini silmiş bulunuyorum, yani mail adreslerinizi kimseyle paylaşmamış olacağım. Bilginizi rica ederim.