For..Next döngüsünün iç içe kullanımı


İç içe For..Next döngüsü kullanımı

For dögüsü yapılacak işleme göre iç içe yazılarak kullanılabilen bir yapıdır. Burada dikkat edilmesi gereken nokta döngünün bir başka kod yapısı ile blok yapısının ihlal edilmemesidir. Her For döngüsü Next ile biter ve döngü içerisinde kullanılan diğer blok yapılar if, else, case vb. kesinlikle Next cümlesinden önce bitmelidir. Özetle modüler bir biçimde kod yazmalısınız döngü içerisinden döngü dışına dallanma yapmamaya çalışmalısınız. Şimdi basit olarak iç içe iki For döngüsü nasıl yazılır bir bakalım.


	Dim i as Integer, k as integer
	For i=1 to 10
	'diğer işletilecek komutlar
	  For k=1 to 5
	     'diğer işletilecek komutlar
	  Next [k]
	'diğer işletilecek komutlar
	Next [i]

Burada Next satırından sonra yazılan i ve k degerleri isteğe bağlıdır yazmasanız da olur. Yazdığımız bu döngüde i nin her değeri için içteki k döngüsü çalışacaktır yani i nin 1 değeri için k defa, i nin 2 değeri için k 5 defa...inin 10 değeri için k, 5 defa çalışacaktır. Çarpma yoluyla sayacak olursak i x k = 10 x 5 = 50 defa toplam döngü çalışmış olacaktır. Şayet iç içe 3 döngü yazmış olsaydık:


	Dim i as Integer, k as integer, j as integer
	For i=1 to 10
	'diğer işletilecek komutlar
	  For k=1 to 5
	     'diğer işletilecek komutlar
	     For j=1 to 8
	       'diğer işletilecek komutlar
	     Next [j]
	     'diğer işletilecek komutlar
	  Next [k]
	'diğer işletilecek komutlar
	Next [i]

Burada ise i x k x j defa döngü dönecektir yani 10 x 5 x 8 = 400 defa döngü işlemi yapılacaktır. İç içe kullanım örneklerini daha da çoğaltabiliriz. Lakin bizim burada dikkat etmemiz gereken nokta döngü kırma işlemi olacaktır. Normalde Exit For deyimi bizi sadece kullanıldığı döngünün dışına taşıyacaktır. Bu durumda kullanıldığı yere göre Exit For deyimi bizi tamamen döngü dışına çıkarabileceği gibi sadece bir üst döngüye de taşıyabilir.


	Dim i as Integer, k as integer, j as integer
	For i=1 to 10
	  For k=1 to 5
	     For j=1 to 8
	       'Exit For burada kullanılırsa k döngüsüne çıkılır
	     Next [j]
	     'Exit For burada kullanılırsa i döngüsüne çıkılır
	  Next [k]
	'Exit For burada kullanılırsa döngü işleminden çıkılır
	Next [i]

Evet şimdi isterseniz iç içe iki adet döngü kullanarak bir çalışma sayfasında çarpım tablosu oluşturlan kodları yazalım.

  1.  Öncelikle bir Excel dokümanı oluşturup kaydedin. Sonrasında Araçlar>Makro>Güvenlik komutları ile ekrana gelen pencerede Makro güvenliği sekmesinde Düşük seçemeğini işaretleyerek Tamam düğmesi ile onaylayın.Kaydet düğmesine basıp dokümanı kapatıp yeniden açın.
  2. .Sonrasında Görünüm > Araç çubukları ile ekrana gelen listeden Visual Basic araç çubuğunu işaretleyin. Bu araç çubuğunda tasarım modu (Şekil-2 / 3 numara) düğmesine basın.
  3. Yine Visual Basic araç çubuğunda yer alan Denetim Araç Kutusu düğmesine (Şekil-2 / 2 numara) basın ve kullanabileceğiz ocx nesnelerini görüntüleyin. Bunların arasından Komut düğmesi nesnesini tıklayın ve sonrasında farenin sol tuşunu basılı tutarak çalışma sayfası üzerinde sürükle bırak yönetimi ile makul büyüklükte 3 adet düğme çizin. Sonrasında bu düğmelerin üzerinde farenin sağ tuşuna basın ekrana gelen pop-up mönüden Özellikler/Properties tıklayın ve sırasıyla bu düğmelerin Caption özelliklerini TABLO YAP, KAYDET KAPAT ve KAPAT yapın. Sonrasında da bu düğmelerin name özelliklerini sırasıyla btnCalistir, btnKaydetCik ve btnKapat yapın.
  4. Veri giriş işlemlerini tamamladıktan sonra Klavyeden ALT+F11 tuşlarına basarak VBA kod editörünü açıyoruz. Burada (şayet ekrana gözükmüyorsa) Project Explorer penceresini ekrana getirmek için CTRL+L tuşlarına basıyoruz. Sonrasında Sayfa1 i çift tıklıyoruz ekrana gelen kod penceresine aşağıda verilen kodları yazıyoruz

Kaynak kodlar


	Private Sub btnCalistir_Click()
	Dim ic As Integer, dis As Integer, satir As Integer, sutun As Integer
	sutun = 0: satir = 0
	'A ile AC arasında kalan tüm sütunların içerikleri siliniyor.

	Sayfa1.Range("A:AC").ClearContents
	For dis = 1 To 10
	    For ic = 1 To 10
	        Sayfa1.Cells(ic + satir, sutun + 1) = dis
	        Sayfa1.Cells(ic + satir, sutun + 2) = "x"
	        Sayfa1.Cells(ic + satir, sutun + 3) = ic
	        Sayfa1.Cells(ic + satir, sutun + 4) = "="
	        Sayfa1.Cells(ic + satir, sutun + 5) = ic * dis
	    Next
	    sutun = sutun + 6
	    If dis = 5 Then
	        satir = satir + 11
	        sutun = 0
	    End If
	Next
	End Sub

	Private Sub btnKapat_Click()
	Application.DisplayAlerts = False
	Application.Quit
	End Sub

	Private Sub btnKaydetCik_Click()
	ThisWorkbook.Save
	Application.Quit
	End Sub

Yardımcı olması dileğiyle