Excel VBA Döngüleri ve Detaylar


Microsoft Excel içerisinde Visual Basic kullanıcılarının ne yazık ki sevmediği konulardan bir tanesi olarak görülen VBA döngülerini, değerli okurlarımın ricalarıyla birlikte mercek altına almaya karar verdim. Döngüler yazılım dillerinde en zaruri ihtiyaçtır. Çünkü hazırlanan kodların çalışması, sonlandırılması ve kasedi tekrar başa sarması gerekir. Bu sistemin oluşması Visual Basic’te döngü algoritmasına bağlıdır.

Bu işlemler belirli bir mantıksal düzene sahiptir. Yani belirlenen işlevi tekrar çalıştırmak istediğimizde, bizleri uzun uzun satırlar boyu makro kodları yazmaktan ihraç ederler. Bugün makalede ele alacağımız döngülerin başlıklarını atalım, arkasından da maddesel olarak detaylandırmak istiyorum.

  • Excel içerisinde kullanabileceğiniz Döngüler;
  1. For Next ,
  2. For Döngüsünü iç içe kullanmak ,
  3. Do While Loop ,
  4. Do While Wend ,
  5. Do Until Loop ,
  6. Do Loop While ,
  7. Do Loop Until ,

İlk olarak birinci maddede yazan For Next döngüsünü ele alarak konuya start verelim.

  • For Next Döngüsü;
Sub ForNext()
Dim i As Integer
For i = 2 To 20
Cells(i, 1) = i
Next i
End Sub

Amacımız Excel’ de tekrar eden basit bir makro çalıştırmak. Hedefimiz A2 hücresine 2 sayısını yazdırmak, ardından A20 hücresine kadar birer birer arttırarak değer yazdırmak. Yani makroyu çalıştır A2 hücresine 2 değerini yaz, sonra git aynı makroyu çalıştır ve sıradaki A3 hücresine 3 değerini yaz, tekrar aynı makroyu çalıştır ve A4 hücresine 4 değerini yaz, gel, gel, gel A20 hücresine 20 değerini yaz ve dur. Şimdi buradaki isteklerimizi her satır için iki işleme tabii tutarsak yani satır seç – değer yaz mantığında düşünelim, toplamda kırk adet cümle yazmam gerekirdi. Bu da kırk satır makro kodu demektir. Şimdi For Next döngüsünün kıymetini anlayabilirsiniz. Bir kaç satırlık döngü sayesinde 40 satırlık ve daha fazlasını içeren çalışma dosyasında ise belkide yüzlerce satırlık bir işlemi toparlamamızı sağlayacak.

Yukarıdaki döngünün temel mantığını makro kodlarıyla anlatmaya çalıştım ama anlamını metinsel olarak özet geçelim.

İlk olarak yaptığımız işlem, i değerinin sistem içerisinde tam sayı olduğunu ifade etmek. Bunun için Integer komutu kullanılır. Yani şu şekilde hazırlanır; ” Dim i As Integer ”

Tam sayı olarak ifade edilen değeri For Next döngüsü kullanarak makro oluşturacağız. Burada ikinci satıra geçerken For i = 2 To 20 ibaresini görmüşsünüzdür. Bunun anlamı, az önce tam sayı olarak belirttiğiniz i değerini, ikinci hücreden yirminci hücreye kadar çalıştırabilirsin demektir. Bir nevi çizgileri çekiyoruz bu sahanın kapsama alanında oynayabilirsin gibilerinden…

Sırada Cell (i,1) komutu var. Nedir bu (i,1), hep bu şekilde garip terimler görüyorum makro kodlarında… sorularının yanıtını veriyorum. i değeri bizim için tam sayı demekti, hangi tam sayılar ? iki ile yirmi arasındaki tam sayılar.

Yani Cell (i,1) = Cell (2,1), Cell (3,1), Cell (4,1)…………Cell (20,1) demektir. Yanındaki 1 değeri ise sütun sayısını verir. 1. sütun demektir. Bu da hücre adresinin koordinatlarını verir. Cell (2,1) = A2 gibi..

Makro kodları içerisinde i değerinin kullanılma sebebi budur. Değişken tamsayı! (Aklınızda olsun For i 2 to 20 arasındaki sayılar)

En sonunda ‘ Next i ‘ komutu yazılır.Belirtilen  i değerini 1 sayı arttıran komuttur ve makro kodunu başa döndürür akabinde anlattığımız kodları baştan çalıştırır. Taa ki bizim belirlediğimiz son işleme kadar çalışır. Peki For Next döngüsünde artan sayıyı birer birer değil de ikişer ikişer attırmak istersek ne yapmamız gerekir ?

  • Step;

Döngü içerisinde ardışık sayılar veya istediğiniz değerde sayıyı arttırarak devam etmek isterseniz Step ifadesini kullanmanız gerekir. Aşağıdaki örnek makro kodunda Step ifadesini ekleyerek düzenleme yaptım. Makro kodlarını çalışma kitabınıza ekleyerek sizde deneme yapabilirsiniz.

Sub ForNextStep()
Dim i As Integer
For i = 3 To 20 Step 2
Cells(i, 2) = i
Next i
End Sub

Ek Not: Step ifadesinin düzenlemesinde satırların ikişer ikişer atlamasını sağlayabildiğimiz gibi, döngünün geriye dönük çalışmasını da imkan verebiliriz. Mesela geriye dönük çalıştırabilmek için ” For i = 20 to 3 Step -2 “şeklinde büyük satırdan küçük satıra doğru negatif Step değeriyle gidilmesini sağlayabiliriz.

Makro kodlarını eklemek için Excel’de Geliştirici sekmesinin aktif olması gerekir. Geliştirici sekmesinin nasıl aktif edildiğini görmek için buradaki konudan inceleyebilirsiniz.

For Next döngüsünü tüm ana hatlarıyla adım adım incelemiş olduk. Bitmedi daha, For Next döngüsünü iç içe kullanıp istediğimiz gibi şekillendirme şansımız bulunuyor.

Yukarıdaki makro kodlarını 3. ve 4. sütunlar üzerinde çalıştırmak istiyorum. Bu sefer Excel içerisinde hem For Next döngüsünü kullanacağım, hem Step ifadesini ekleyeceğim hem de iç içe bağlam kuracağım. Aşağıdaki kodlar sonuç getirecektir.

  • For Next (İç içe Döngü) + Step Kullanımı;
Sub ForNextIn()
Dim i As Integer
Dim c As Integer
For c = 3 To 4
For i = 3 To 20 Step 3
Cells(i, c) = i
Next i
Next c
End Sub

Küçük not düşmek istiyorum, burada kullanılan Integer değerinin Visual Basic içerisinde belirli limitleri bulunmaktadır. Integer limitlerini aşan değerler girerseniz, makro çalıştığında ‘OverFlow’ hatasıyla karşılaşırsınız. Bunun için yüksek bitiş değerine sahip limitlerde Integer yerine Long olarak tanımlamanız gerekir. Integer değerinin limitlerini buradaki linkten inceleyebilirsiniz.

  • For Each ;

For Each döngüsüyle For Next döngüsüne arasında ne gibi fark vardır sorularına cevap aradığınız bölüm burası… For Each döngüsü genelde belli bir nesne topluluğunda kullanılır. Belirli bir koleksiyondaki tüm nesneleri döndürür. İkisi arasındaki çalışma mantığını anlatan farkları maddesel olarak sunacağım böylesi daha kolay olacaktır.

  • For Next : Döngünün kaç defa çalışacağını kullanıcı belirlerken,
  • For Each : Döngünün kaç defa çalışacağını genellikle bir dizi değişken yardımıyla belirlenir. Buradan anlaşılacağı üzere Each döngüsündeki kurgulama dizilerle beraber yapılır demektir. Bunu kısa bir örnek kodla açıklamak istiyorum.
Sub ForEach()
Dim Excel As Range
Dim Makro As Integer
Makro = 3
For Each Excel In Range("E3:E20")
Excel.Value = Makro
Makro = Makro + 1
Next Excel
End Sub

Hazırlanan makro kodlarının aslen Türkçesi, benim belirlediğim dizi aralığında çalışabilirsin demektir.

For Next döngüleri içerisinde her detayı sizlerle paylaştım. Hatta bunlarla ilgili örnek çalışma dosyasını da konu bitiminde paylaşacağım. Buraya kadar ki anlatımlarıma istinaden konuyu toparlamak adına Excel’den sonuç tablosu olarak ekran görüntüsü paylaşayım daha doğrusu hareketli gif olarak paylaşacağım ki zihninizde kalıcı etkisi yaratabilir.

Visual Basic For Next Donguler Excel Egitimleri

  • Do While – Loop ;

Do While döngüsü koşul sağlandığı süre boyunca çalışıyor. For döngüsünden farkı ise i değerini benim arttırmam gerekiyor. Önemli olan detayda burada; eğer i değerini arttırmazsanız varsayılan koşul 1 olur ve istenen koşul sağlandığından dolayı bitmeyen sonsuz döngü içerisine girer. Şimdi aşağıdaki Do While döngü kodlarını biraz irdeleyelim.

Sub DoWhile()
Dim i As Integer
i = 3
Do While i < 21
Cells(i, 5).Value = i
i = i + 1
Loop
End Sub

Yukarıdaki oluşumda i=3 makronun başlangıç satır sayısını belirtir yani üçüncü satırdan itibaren makro çalışmaya başlayacak. Arkasından Do While i değerini belirtiyoruz. 3 ila 20. satırlar arasında döngü çalıştırmak istiyorsam Do While i < 21 yazarım. Onun arkasından Cells(i,5) adresi 5. sütun 3. satırdan başlayacağı anlamına gelir.

  • Do While – Wend ;

Do While Wend ilişkisi, Do While Loop yapısıyla aynıdır, aralarında bir fark yoktur. Loop döngüsü daha çok tercih ediliyor.

  • Do Until – Loop ;

Do Until döngüsünde (until ingilizce kelime anlamında olduğu gibi -e kadar) koşul sağlanana kadar çalışır. Hücre sayısı 20’den büyük olana kadar döngüyü çalıştır komutunu oluşturuyorum. Bunun için aşağıdaki kodları Makro sayfanıza ekleyip deneyin.

Sub DoUntil()
Dim i As Integer
i = 3
Do Until i &gt; 20
Cells(i, 6).Value = i
i = i + 1
Loop
End Sub
  • Do Loop While;

Do While döngüsüyle aynı mantık çerçevesinde çalışır. Aradaki farkları merak ediyorsunuz hemen anlatayım.

Fark ettiyseniz While koşulu Loop koşulundan sonra geliyor, bu da demek oluyor ki döngümüz koşulu en sonda kontrol ediyor. Yani mevcut döngü belirlenen koşula bakmaksızın en az 1 defa çalışır. Koşula uygun olan kodlar aşağıdaki gibidir.

Excel Koşula uygun;

Sub DoLoopWhile()
Dim i As Integer
i = 3
Do
Cells(i, 7).Value = i
i = i + 1
Loop While i &lt; 21
End Sub

Tam tersi koşula uymayan versiyonunu da aşağıdaki kodlara ekliyorum, böylece her iki durumda sonuçları karşılaştırabilirsiniz.

Excel Koşula uygun değil; Aşağıdaki kodlarda i = 22 yapıyorum, başlangıç hücresi 22 olursa kriterimize uygun olmayacaktır ama döngü yine de 1 sefer çalışacaktır. Sonuçları görmek isterseniz örnek dosyayı indirip inceleyebilirsiniz.

Sub DoLoopWhile()
Dim i As Integer
i = 22
Do
Cells(i, 7).Value = i
i = i + 1
Loop While i &lt; 21
End Sub
  • Do Loop Until;

Do Until döngüsüyle aynı mantıkta çalışır. İki döngü arasındaki fark Until döngüsü Loop’tan sonra geliyor. Akabinde belirlenen koşulu en sonda kontrol ediyor. Yani koşul sağlansa da, sağlanmasa da döngümüz en az 1 defa çalışır.

Sub DoLoopUntil()
Dim i As Integer
i = 3
Do
Cells(i, 8).Value = i
i = i + 1
Loop Until i &gt; 20
End Sub

Kodlara dikkat ettiyseniz eğer, neyin neye yaradığını anlamak artık daha kolay… Döngüyü 3. satır 8. sütundan itibaren başlat, i değerini yazdır ve üzerine +1 ilave ederek alttaki hücrede tekrar çalıştır taa ki 20. satıra kadar…

  • Exit For, Exit Do; Çıkış Komutları Nasıl Kullanılır ?

For döngülerinde koşulların bitmesini beklemeden istediğimiz zaman Exit For komutuyla, Do Loop gibi yukarıda anlattığım gibi kriter içeren döngülerde ise Exit Do komutuyla çıkış yapabiliriz.

Kısa bir örnekle şekillendirelim;

...
If Deger &amp;gt;= 3 And Deger &amp;lt;= 9 Then
Continue For
End If
If Deger = 10 Then
Exit For
End If
Next
...

 


Sırasıyla Excel içinde incelediğimiz döngü başlıklarına en ince ayrıntılarına kadar öğrenmiş olduk.

  1. For Next ,
  2. For Each ,
  3. For Döngüsünü iç içe kullanmak ,
  4. Do While Loop ,
  5. Do Until Loop ,
  6. Do Loop While ,
  7. Do Loop Until ,

Konuda anlatmış olduğum tüm Excel döngülerini aşağıdaki çalışma kitabından inceleyip test etmek isterseniz, hazırladığım örnek dosyayı linkten indirebilirsiniz.

Excel VBA Döngüler – Çalışma Dosyası,

Microsoft Excel VBA Donguler For Next Do While Until Loop

[ for next do while do until loop in excel vba example macro]

[ Do , While , Wend , Until , Loop , For , Next , To , Exit , Goto ,]


Excel VBA Döngüleri ve Detaylar” için 2 yorum

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir