TOP

VBA-Ders 8.1. Döngüler (Loops)

Döngüler talimatları birkaç kez tekrarlar ve çok zaman kazandırabilir.

Excel VBA'de aşağıdaki döngü türleri mevcuttur:

  • While ... Wend
  • Do ... Loop
  • For ... To ... Next

  • Aşağıdaki kod, A sütununun her hücresine (1'den 12'ye kadar) bir sayı dizisi ekler:

    Sub while_loop()
    
        Cells(1, 1) = 1
        Cells(2, 1) = 2
        Cells(3, 1) = 3
        Cells(4, 1) = 4
        Cells(5, 1) = 5
        Cells(6, 1) = 6
        Cells(7, 1) = 7
        Cells(8, 1) = 8
        Cells(9, 1) = 9
        Cells(10, 1) = 10
        Cells(11, 1) = 11
        Cells(12, 1) = 12
    
    End Sub
    

    Bu kod çok tekrarlanıyor...

    Ardışık sayıları 12 yerine yüzlerce hücreye eklemek zorunda kaldığımızı hayal edin... Artık döngülerin neden çok yararlı olduğunu anlıyorsunuz.

    WHILE ... WEND

    Boş bir While döngüsüne örnek verelim:

    Sub while_loop()
    
        While [durum]
            'Talimatlar
        Wend
    
    End Sub
    

    Koşul doğru olduğu sürece döngüdeki ifadeler çalışmaya devam edecektir (ancak sonsuz bir döngü oluşturmamaya dikkat edin).

    Aşağıda daha önce tartışılan ve While döngüsüne dönüştürülen döngü makrosu bulunmaktadır:

    Sub while_loop()
    
        Dim num As Integer
        num = 1 'Başlangıç numarası (bu durumda satır numarası ve ayarlanan değerdir)
    
        While num <= 12 'Num değişkeni 12'den küçük veya ona eşit olduğu sürece talimatlar yürütülecektir.
           Cells(num, 1) = num 'Numaralama
           num = num + 1 'Döngü her geçtiğinde sayı 1 artırılır
        Wend
           
    End Sub
    

    Bu döngüyü bir makroda kullanarak, 12 yerine 400 kasete ihtiyacımız olursa tek yapmamız gereken 12'yi 400 ile değiştirmek olacaktır.

    DO ... LOOP

    While Wend ile aynı şekilde çalışan bir döngü yazmanın başka bir yolu vardır (While komutunun içerdiği belirli bir koşul doğru olduğu sürece çalışır):

    Sub do_while_loop()
    
        Do While [durum]
            'Talimatlar
        Loop
    
    End Sub
    

    Aşağıdaki sürüm, koşulun Do Loop döngüsünün sonuna yazılabileceğini gösterir; bu, talimatların tam olarak en az bir kez yürütüleceği anlamına gelir:

    Sub do_while_loop()
    
        Do
            'Talimatlar
        Loop While [durum]
    
    End Sub
    

    Koşul yerine getirilirken döngü yapmak yerine, While'yi Until ile değiştirirsek döngüden koşula göre de çıkabiliriz:

    Sub do_while_loop()
    
        Do Until [durum]
            'Talimatlar
        Loop
    
    End Sub
    

    FOR ... TO ... NEXT

    Sub for_loop()
    
        For i = 1 To 5
            'Talimatlar
        Next
    
    End Sub
    

    For döngüsü burada 5 kez tekrarlanacaktır.

    Bu döngü her tekrarlandığında i değişkeni otomatik olarak 1 artırılır:

    Sub for_loop()
    
        For i = 1 To 5
            MsgBox i
        Next
    
    End Sub
    

    Erken döngü çıkışı (Exit)

    Aşağıdaki talimatı kullanarak For döngüsünden erken çıkmak mümkündür:

    Exit For 'For döngüsünden çıkış
    

    Bunu açıkça gösterecek bir örnek düşünelim:

    Sub for_loop()
        Dim max_loops As Integer
        max_loops = Range("A1") 'A1 hücresinde tekrar sayısı sınırını belirledik
    
        For i = 1 To 7 'Beklenen döngü sayısı: 7
           If i > max_loops Then 'A1 hücresi boşsa veya 7'den küçük bir sayı içeriyorsa tekrar sayısını azaltın
               Exit For 'Önceki koşul TRUE ise, döngüden çıkış For...loop
           End If
       
           MsgBox i
        Next
    
    End Sub
    

    Diğer Exit operatörleri:

    Exit Do 'Döngü çıkışı Do Loop
    
    Exit Sub 'Prosedürden çıkış
    
    Exit Function 'Çıkış işlevi