IF-ELSEIF karar yapısı


IF ... ELSEIF ... THEN şart yapısının incelenmesi

Daha önce belirli bir şart sağlandığında ya da istenilen şart sağlanmadığında bir takım işlemlerin yapılmasına imkan tanıyan if ve if-else yapılarını incelemiştik. Bu yapıların her ikisi de sadece ve sadece bir tek şartın doğru ya da yanlış olmasına bağlı olarak hareket ederler. Lakin bazen bir çok durum alabilen olayları irdelemek isteriz. Bu olaylar genelde çok durumlu olup bu durumlardan herhangi biri sağlandığında da sadece o duruma özel bir işlem yapmak isteyebiliriz. Özetle bir çok şart cümlesini kontrol edip bunların doğru olmaları halinde sadece ve sadece o şarta özel işlemler yapmak istediğimizde if-elseif-then yapısını kullanırız.

if_elseIf_yapisiŞekil-1

Şekil-1 de görüldüğü üzere A noktasından B noktasına akmak isteyen programımız yolda karşılaştığı şart cümlelerine göre değişik yollar izleyecektir. Örneğin program yukarıdan aşağıya doğru işletilirken daha ilk şart cümlesi doğru ise bu durumda işlem-1 yapılacak ve program B noktasından akmaya devam edecektir. Şayet Şart-1 doğru değilse program 2. şartı kontrol etmek üzere yoluna devam edecektir. Bu işlem böyle yazdığınız şart sayısına göre devam edecek ve şartlardan herhangi biri sağlandığında ona ait olan işlem yapıldıktan sonra program B noktasına atlayarak akmaya devam edecektir. Ancak yazmış olduğunuz şartlar tek tek kontrol edilmesine rağmen herhangi biri doğru değilse bu durumda son şart cümlesinden sonra yazacağınız Else yapısındaki kodlar işletilecektir. Şimdi buraya kadar anlattıklarımızı kabaca VBA olarak yazmaya çalışalım.

if şart1 then
şart1 doğru ise yapılacak işlemlere ait program kodları
elseif şart2 then
şart2 doğru ise yapılacak işlemlere ait program kodları
elseif şart3 then
şart3 doğru ise yapılacak işlemlere ait program kodları
.....
elseif şart-n then
şart-n doğru ise yapılacak işlemlere ait program kodları
else
şartların hiç biri sağlanmıyorsa yapılacak işlemlere ait program kodları
end if

Şimdi buraya kadar ifade etmeye çalıştığımız bu yapıyı gerçek VBA kodları üzerinde anlatmaya çalışalım. İlk örneğimizde 0-9 arasındaki sayıları metne dönüştüren bir fonksiyon yazacağız. Burada değinilen fonksiyon yapısı ilerideki konularda ele alınacaktır(Bu lafı da o kadar sık okuyorsunuz ki sanıyorum biraz itici olmaya başladı ama ne yapalım ilkel de olsa çalışan örnekler yazmak gerektiğinde konular ister istemez böyle girift bir hal alıyor...) Burada dikkat edilecek iki konu vardır. Birincisi bu fonksiyonun tüm çalışma sayfalarında =sayilariOku(A5) vb. şeklinde kullanılabilmesi için Modül eklenerek bu modülün içerisine yazılması gerektiğidir. İkinci ise C, C++, Java vb. dillerde fonksiyonlar geriye değer döndürürken return sözcüğünü kullanıyorken burada fonksiyon adının kullanıldığıdır.

Function sayilariOku(deger As Byte) As String
'Kendisine gönderilen 0-9 arasındaki sayıları metne dönüştüren fonksiyon olup
'bu aralık dışında ancak (0-255) arasında kalmak kaydı ile gönderilen diğer
'değerler için GEÇERSİZ GİRDİ sonucu üretmektedir.

Dim sonuc As String
If deger = 0 Then
sonuc = "SIFIR"
ElseIf deger = 1 Then
sonuc = "BİR"
ElseIf deger = 2 Then
sonuc = "İKİ"
ElseIf deger = 3 Then
sonuc = "ÜÇ"
ElseIf deger = 4 Then
sonuc = "DÖRT"
ElseIf deger = 5 Then
sonuc = "BEŞ"
ElseIf deger = 6 Then
sonuc = "ALTI"
ElseIf deger = 7 Then
sonuc = "YEDİ"
ElseIf deger = 8 Then
sonuc = "SEKİZ"
ElseIf deger = 9 Then
sonuc = "DOKUZ"
Else
sonuc = "GEÇERSİZ GİRDİ"
End If
sayilariOku = sonuc
End Function

İkinci örneğimizde ise maas olarak gönderilen parametreye göre değişik String değerler üreten bir fonksiyon yazılmıştır. Fonksiyon aralık dışı değer girişlerinde hiç bir sonuç üretmemektedir.Bu nedenle =gelirDuzeyi(F5) vb. şeklinde çağırıldığında hücrede hiç bir sonuç üretmeyecek ve hücre içeriği boş kalacaktır.

Function gelirDuzeyi(maas As Integer) As String
If maas = 0 Then
gelirDuzeyi = "YARDIMA MUHTAÇ"
ElseIf maas > 0 And maas <= 800 Then
gelirDuzeyi = "FAKİR"
ElseIf maas > 800 And maas <= 2000 Then
gelirDuzeyi = "ASGARİ GELİR DÜZEYİ"
ElseIf maas > 2000 And maas <= 5000 Then
gelirDuzeyi = "ORTA GELİR DÜZEYİ"
ElseIf maas > 5000 And maas <= 10000 Then
gelirDuzeyi = "YÜKSEK GELİR DÜZEYİ"
End If
End Function

Üçüncü örneğimizde ise sayfa yerleştirilen ve name özelliği btnKontrol olarak ayarlanmış Command Button nesnesinin click yani tıklama olayına yazılan bu kodlar ile A1 ile A5 arasındaki hücrelerin değerleri kontrol edilmektedir. Şayet bu hücreler veri içermiyor ya da 0 değerini içeriyorlarsa B sütununda aynı satırdaki hücrede kırmızı renkte "GEÇERSİZ DEĞER" bilgisi görüntülenmektedir. Bunların dışındaki her değer için ise B sütununda aynı satırdaki hücrenin yazı rengi yeşile dönüştürülmektedir. İlerleyen zamanlarda döngüleri ve range nesnesini işlediğimizde bu kodları daha kısa ve verimli yazacağız.

Private Sub btnKontrol_Click()
If Sayfa1.Cells(1, 1))="0" or Sayfa1.Cells(1, 1))="" Then
     Sayfa1.Cells(1, 2).Font.Color = RGB(255, 0, 0)
     Sayfa1.Cells(1, 2) = "GEÇERSİZ DEĞER "
ElseIf Sayfa1.Cells(1, 1))<>"0" or Sayfa1.Cells(1, 1))<>"" Then
     Sayfa1.Cells(1, 2).Font.Color = RGB(0, 255, 0)
ElseIf Sayfa1.Cells(2,1 ))="0" or Sayfa1.Cells(2, 1))="" Then
     Sayfa1.Cells(2, 2).Font.Color = RGB(255, 0, 0)
     Sayfa1.Cells(2, 2) = "GEÇERSİZ DEĞER "
ElseIf Sayfa1.Cells(2, 1))<>"0" or Sayfa1.Cells(2, 1))<>"" Then
     Sayfa1.Cells(2, 2).Font.Color = RGB(0, 255, 0)
ElseIf Sayfa1.Cells(3,1 ))="0" or Sayfa1.Cells(3, 1))="" Then
     Sayfa1.Cells(3, 2).Font.Color = RGB(255, 0, 0)
     Sayfa1.Cells(3, 2) = "GEÇERSİZ DEĞER "
ElseIf Sayfa1.Cells(3, 1))<>"0" or Sayfa1.Cells(3, 1))<>"" Then
     Sayfa1.Cells(3, 2).Font.Color = RGB(0, 255, 0)
ElseIf Sayfa1.Cells(4,1 ))="0" or Sayfa1.Cells(4, 1))="" Then
     Sayfa1.Cells(4, 2).Font.Color = RGB(255, 0, 0)
     Sayfa1.Cells(4, 2) = "GEÇERSİZ DEĞER "
ElseIf Sayfa1.Cells(4, 1))<>"0" or Sayfa1.Cells(4, 1))<>"" Then
     Sayfa1.Cells(4, 2).Font.Color = RGB(0, 255, 0)
ElseIf Sayfa1.Cells(5,1 ))="0" or Sayfa1.Cells(5, 1))="" Then
     Sayfa1.Cells(5, 2).Font.Color = RGB(255, 0, 0)
     Sayfa1.Cells(5, 2) = "GEÇERSİZ DEĞER "
ElseIf Sayfa1.Cells(5, 1))<>"0" or Sayfa1.Cells(5, 1))<>"" Then
     Sayfa1.Cells(5, 2).Font.Color = RGB(0, 255, 0)
End If
End Sub

İşin özünü söylemek gerekirse bunları uygulamalar üzerinde ele almak daha verimli olacaktır. Ancak uygulamalarda hadi şimdi if kullanalım yok olmadı if-else kullanalım demeyeceğiz elbette işimize geldiği gibi kodları yazacağız. Sanıyorum buraya kadar yazılanlar if-elseif-then yapısı için yeterlidir. Kural basit; "bir çok şarttan sadece ilk doğru şarta ait program kodları işletilir." Bu kadar

Yardımcı olması dileğiyle