Vba for loop (sonraki i̇çin, her biri i̇çin)
Anahtar noktaları
- VBA For döngüleri sabit döngü türleridir.
- Makro kaydederken bu döngülerden birini kullanmak mümkün değildir.
Bir sonraki döngü için
VBA FOR NEXT yinelemeleri yürütmek için bir sayaç kullanan sabit bir döngüdür. Basit bir ifadeyle, döngüyü kaç kez çalıştırmak istediğinizi belirtmeniz gerekir ve bu döngü sayısına ulaştığında otomatik olarak duracaktır. Bu nedenle sabit bir döngüdür ve VBA geliştiricileri arasında en popüler olanıdır.
Sözdizimi
İşte VBA For Next döngüsünün sözdizimi:
For counter = Start To End [Step stepsize] [statements] Next [counter]
- Sayaç : Tekrar sayısını saklayan ve her tekrarda değerini artıran bir değişkendir. Örneğin, döngü beşinci yinelemesindeyse sayaç değeri beş olur ve döngü beşinci yinelemenin talimatını yürüttüğünde sayaç değeri altıya değişir.
- Start : Sayacın başlangıç değerini saklayan sayısal bir değişkendir.
- End : Sayacın son değerini saklayan sayısal bir değişkendir.
- Adım boyutu : Bu değişken sayaç değerindeki büyük artışı veya azalmayı belirtir. Varsayılan olarak adım boyutu birdir ancak herhangi bir pozitif veya negatif değeri de kullanabilirsiniz.
- Açıklama : Bu, For Next döngüsünün her yinelemesinde çalıştırmak istediğiniz bir kod kümesidir.
- Sonraki : Bu, döngünün yinelenmesi için end ifadesidir ve VBA’ya döngüyü tekrarlamasını söylemek için sayaç değerini kullanır ve sayaç bitiş değerine ulaştığında döngüyü sonlandırır.
Bir sonraki döngü için anlaşılması gereken örnek
Bir sonraki döngüde nasıl kullanılacağını anlamak için seri numaralarını bir sütuna ekleyen basit bir kod yazalım.
Biraz daha detaylandırayım: Aşağıdaki anlık görüntüde seçilen hücreden sonraki 10 hücreye tek tek gidebilecek ve sadece seri numaralarını ekleyebilecek bir kod yazmamız gerekiyor.
For Next Loop’u kullanmak için aşağıdaki adımları takip edebilirsiniz:
- Öncelikle sayaç değerini saklamak için kullanabileceğiniz bir değişken tanımlamanız gerekir.
- Daha sonra sayaç değerini değişkene atamamız gerekiyor.
- Şimdi döngü için kod yazmanın zamanı geldi, bu yüzden ilk satırda sayaç değişkenini kullanmanız ve başlangıç ve bitiş değerlerini ayarlamanız gerekiyor. Bu kodda bitiş değeri olarak ‘i’ değişkenine sahipsiniz.
- Buradan seri numaralarını aktif hücreye ekleyip bir sonraki hücreye geçebilecek kodu yazmanız gerekiyor. Sayaç değeri her yinelemede arttıkça, seri numarasını aktif hücreye girmek için kullanabilirsiniz ve bundan sonra seçimi bir sonraki hücreye aşağı taşımak için kaydırmayı kullanabilirsiniz.
- Sonunda döngü kodunu tamamlamak için next anahtar sözcüğünü ve sayaç değişkenini kullanın.
Sub AddSerialNumbers() Dim i As Integer i = 10 For i = 1 To i ActiveCell.Value = i ActiveCell.Offset(1, 0).Activate Next i End Sub
Aşağıdaki anlık görüntüde görebileceğiniz gibi, bu kodu çalıştırdığımda seri numarası girilerek seçilen hücreden başlıyor ve her yinelemede bir sonraki hücreye geçiyor.
Bildiğiniz gibi For Next sabit bir döngüdür ve bu kodda sayısal bir değer atadığınızda VBA’ya döngüyü o sayıda çalıştırmasını söyler.
Aşağıda döngünün ikinci yinelemesinde çektiğim, sayaç değişkeni “i”nin değerinin iki olduğu anlık görüntüyü görebilirsiniz.
Vurgulamaya çalıştığım nokta, sayım değişkeninin her yinelemede değerini değiştirmesi ve bu değeri aktif hücreye girmesi, ardından kaydırmanın bir sonraki hücreyi etkinleştirerek yinelemeyi tamamlamasıdır.
Sonunda, döngünün ilk satırına dönmek ve onu tekrarlamak için “Sonraki” anahtar sözcüğü VBA’dır. For Next sözdiziminde gördüğünüz gibi, sayacı buna göre çalıştırmak için döngüdeki bir adım değerini de kullanabilirsiniz.
Yani adım değeri olarak ikiyi kullanırsanız kod aşağıdaki gibi görünecektir.
Sub AddSerialNumbers() Dim i As Integer i = 10 For i = 1 To i Step 2 ActiveCell.Value = i ActiveCell.Offset(1, 0).Activate Next i End Sub
Ve bu kodu çalıştırdığınızda, aktivitede aşağıdaki anlık görüntüye benzer bir şey olacaktır.
Bir adım değeri kullandığınızda (yukarıdaki kodda kullandığınız adım 2 gibi), VBA döngüdeki her 2. yinelemeyi yok sayar ve görebileceğiniz gibi, her sayıda bir farkla beş sayınız olur.
Not : Yukarıdaki örnekte sayaç değişkeni olarak ‘i’yi kullandınız, ancak size kolaylık olması açısından farklı bir ad da kullanabilirsiniz.
Sonraki her döngü için
VBA FOR ECH NEXT, bir koleksiyondaki tüm nesneler arasında döngü yapabilen sabit bir döngüdür. Her Sonraki İçin’de yineleme sayısını belirtmenize gerek yoktur. Bunun yerine, bir nesne koleksiyonu belirtebilirsiniz ve bu, tüm bu nesneler arasında tek tek yineleme yapabilecektir.
Örneğin : Bir aralıktaki tüm hücrelere göz atmak istiyorsanız. Bu durumda aralık koleksiyondur ve hücreler sahip olduğunuz nesnelerdir.
Sözdizimi
Sonraki her döngü için VBA sözdizimi aşağıda verilmiştir:
For Each Object In Collection [statements] Next [object]
- Object : Nesne koleksiyonunda döngü yaptığınız tek nesneyi temsil eder. Her yinelemede bir nesneden diğerine gider.
- Koleksiyon : Bu, döngü yapmak istediğiniz nesnelerin bir koleksiyonudur.
- Açıklama : Koleksiyondaki tüm nesneler boyunca her döngüde çalıştırmak istediğiniz kod satırları.
- Next : Bu, döngü yinelemesinin end ifadesidir ve VBA’ya koleksiyondaki bir sonraki nesneye geçmesini söyler.
Her Sonraki Döngüyü Anlamak İçin Örnek
For Every Next döngüsünü anlamak için aktif çalışma sayfası dışındaki tüm sayfaları gizleyecek kod yazalım. Bu kod, her çalışma sayfasının adını kontrol edecek ve onu etkin çalışma sayfasının adıyla eşleştirecek ve eşleşmezse gizleyecektir.
Her Sonraki İçin döngüsünü kullanmak için aşağıdaki adımları takip edebilirsiniz:
- Öncelikle çalışma sayfası olarak kullanılacak bir değişken bildirmeniz gerekir.
- Bundan sonra, “Her Biri İçin” anahtar kelimesini, ardından sayfa için “mySheet” değişkenini kullanın ve etkin çalışma kitabının çalışma sayfası koleksiyonu için “ActiveWorkbook.Worksheets”i kullanın.
- Daha sonra, şu anda bu döngü yinelemesinde bulunan sayfanın adının etkin çalışma sayfasına EŞİT OLMADIĞINI test etmek için VBA IF ifadesini kullanmanız gerekir ve bu koşul doğruysa, şu anda döngüde olan sayfayı gizleyin yineleme.
- Sonunda, döngü kodunu tamamlamak için NEXT anahtar sözcüğüne ve “mySheet” değişkenine sahipsiniz.
Son kod:
Sub Hide_Other_Sheets() Dim mySheet As Worksheet For Each mySheet In ActiveWorkbook.Worksheets If mySheet.Name <> ActiveSheet.Name Then mySheet.Visible = False End If Next mySheet End Sub
Bu kodu çalıştırdığınızda , etkin çalışma kitabındaki her çalışma sayfasının üzerinden geçerek kendi adını etkin çalışma sayfasıyla eşleştirir ve çalışma sayfasının adı, etkin çalışma sayfasının adıyla eşleşmiyorsa bunu yapar. maske.
Bu şekilde tüm çalışma sayfaları gizlenecektir.