For Next döngüsü


For..Next döngüsünün incelenmesi.

VBA projelerinizde bazen belirli bir işlemin farklı veriler üzerinde tekraren uygulanması gerekebilir bu gibi durumlarda döngü komutlarından yararlanırz. Şimdi sizlerle birlikte belirli sayıda tekrar edecek işlemlerde kullanacağımız FOR..NEXT döngüsünü inceleyeceğiz. Burada kilit nokta inceleyeceğimiz yapının tekrarlama işlemini belirli bir sayıda gerçekleştirmesidir ki bazı durumlarda bu tekrar sayısını istersek kırabililiriz. Şimdi kısaca For döngüsünün nasıl yazıldığını açıklayalalım. Aşağıda verildiği üzere döngü daha önce tanımlanmış olan bir tam sayı değişkene bir ilk değer ataması ile başlar sonrasında bir son değer ve isteğe bağlı olarak bir de adım değeri alır.

FOR degisken=ilkDeger TO sonDeger [STEP adimDeğeri]

     diğer komutlar

NEXT

Misal, 1-10 arasındaki sayma sayılarını Sayfa1 çalışma sayfasında A sütununda yukarıdan aşağıya yazdıralım, bunun için aşağıda verilen satırları kullanmalıyız.

Dim i as Integer
For i=1 to 10
  Sayfa1.Cells(i,1).value=i
Next

0 - 100 arasındaki çift sayıları Safya1 çalışma sayfasında A sütununda yukarıdan aşağıya yazdıralım

Dim i as Integer
For i=0 to 100 Step 2
  Sayfa1.Cells(i,1).value=i
Next

99- 1arasındaki teksayıları Safya1 çalışma sayfasında A sütununda yukarıdan aşağıya yazdıralım

Dim i as Integer
For i=99 to 1 Step -2
  Sayfa1.Cells(i,1).value=i
Next


A-Z  arasındaki büyük harfleri Safya1 çalışma sayfasında A sütununa bunların ASCII kodlarını B sütununa yukarıdan aşağıya yazdıralım

Dim i as Integer
For i=65 to 90
  Sayfa1.Cells(i,1).value=chr(i)
  Sayfa1.Cells(i,2).value=i
Next

Görüldüğü üzere kullanması oldukça basit bir yapıdır burada yer alan kodları çoğaltmak elbette mümkün şimdi isterseniz sayılar üzerinde çalışmaya devam edelim ve kendisine gönderilen  bir sayının asal sayı olması durumunda true aksi durumda false sonucu üreten fonksiyonu yazalım.


Function asalmi(sayi As Integer) As Boolean
'***************************************************************************************
'Kodlayan           : Bilal SERT
'Tarih / Saat       : 04.07.2014-05:17
'Amaç                : Bir sayının asal sayı olup olmadığında karar vermek
'Giriş/Çıkış         : sayi incelenecek deger / asal ise true değilse false
'Çağrıldığı yerler : asalSayilariListele()
'Çağırdıkları       :
'***************************************************************************************
Dim sayac As Integer, sonuc As Boolean
sonuc = True
'negatif bir sayi gönderilirse gereksiz yere
'kod yazmamak için sayi pozitife dönüştürülüyor
'sonuç olarak yapılacak işlemler negatif sayılar içinde aynıdır
If sayi < 0 Then sayi = sayi * (-1)
If sayi = 1 Then
    sonuc = False
Else
    For sayac = 2 To sayi - 1
        If sayi Mod sayac = 0 Then
            sonuc = False
            Exit For
        End If
    Next
End If
asalmi = sonuc
End Function

Son olarak ta isterseniz yazdığımız asalmi() fonksiyonunu kullanarak A sütununda bulunan sayılar (ki varsalım A sütunu tam sayılarla dolu olsun) arasında kaç tane asal sayı var bunu tespit eden alt programın kodlarını yazalım. Bu arada alt program konusunu sonra ele alacağız ama siz bunu şöyle düşünün alt program sub ile başlayıp end sub ile biten bir araç olup aynı işlemleri farklı veriler üzerinde defaatle yapmak istediğimizde kullandığımız bir araçtır bir nev-i mutfak robotu :)


Sub asalSayilariListele(kacTane As Integer)
'***************************************************************************************
'Kodlayan           : Bilal SERT
'Tarih / Saat       : 04.07.2014-05:17
'Amaç                : İstenilen sayıda asal sayıyı bulup listelemek
'Giriş/Çıkış         : kacTane asal sayı adedi / yok
'Çağrıldığı yerler :
'Çağırdıkları       : asalmi()
'***************************************************************************************
'sayici ile belirlenen tane asal sayıyı tesit ediyoruz
Dim satir, sayici As Integer
satir= 1: sayici = 0
for satir=1 to 65535
    If asalmi(Sayfa1.Cells(satir, 1)) Then
        sayici = sayici + 1
    End If
    'ilk boş hücre bulunduğunda döngüden çıkılıyor.
    if Sayfa1.Cells(satir,1)="" Then Exit For
Next
End Sub


Yukarıda verilen örnekte Exit For dikkatinizi çekmiştir umarım. Bu döndünün sonuna gelinmemiş bile olsa kırılmasını ve sona erdirilmesini sağlar. Sizlerde For döngülerinizde belirli şartlar altında döngünün sona ermesini istiyorsanız Exit For kullanmalısınız. Exit For iç içe döngü kullanıldığında ise kullanıldığı yere göre bir üst döngüye ya da en dış döngüde kullanılmış ise döngü dışına çıkılmasını sağlar. İç içe döngüleri sizlerle birlikte inşaallah başka bir makalede ele alacağız. Umarım bir faydası olmuştur.

Yardımcı olması dileğiyle.