VBA Döngüleri, birden fazla hücre, çalışma sayfası, çalışma kitabı vb. üzerinde aynı eylem kümesini gerçekleştirmemize olanak tanır. Örneğin, ilk 10 satıra 1'den 10'a kadar bir seri numarası eklemek istiyorsak, 10 satır kod yazmamıza gerek kalmaz. Bunun yerine, eylemleri on farklı hücre üzerinde gerçekleştirmek için döngüleri kullanabiliriz.
Aşağıda Excel'de VBA döngülerinin kullanımına ilişkin bazı pratik örnekler verilmiştir.
- Bir hücre aralığında döngü yapın ve aynı eylem kümesini gerçekleştirin. Örneğin, biçimlendirme uygulayın veya metin ekleyin.
- Birden fazla çalışma sayfası arasında dolaşın ve bazı eylemleri veya görevleri gerçekleştirin. Örneğin, sayfaları gizleyin veya gösterin.
- Birden fazla çalışma kitabı arasında dolaşın ve bir şeyler yapın. Örneğin, geçerli çalışma kitabı hariç tüm açık çalışma kitaplarını kaydedin ve kapatın.
- Tüm çizelgeleri dolaşın ve bir şeyler yapın. Örneğin, yazı tipini veya stilini değiştirin.
- Diziler arasında döngü.
- Bir hücredeki tüm karakterler arasında dolaşın ve metnin belirli bir bölümünü çıkarın.
Bunlar VBA döngülerini kullanarak ve VBA ile verimli bir şekilde çalışarak yapılabilecek tüm aktivitelerdir
ÖNEMLİ NOKTALAR
- VBA Döngüleri, döngüde verilen sayıya göre aynı görevi birden çok kez gerçekleştirmemize yardımcı olur.
- Excel'de dört tür VBA döngüsü vardır ve bunlar FOR NEXT VBA LOOP, FOR EACH VBA LOOP, DO WHILE VBA LOOP ve DO UNTIL VBA LOOP'tur.
- For Next VBA LOOP hücreler arasında döngü oluşturmak için kullanılır.
- Benzer şekilde, For Each VBA Döngüsü nesneler arasında döngü oluşturmak için kullanılır.
- Do While ve Until benzer şekilde çalışır. Ancak, verilen mantık tam tersi olmalıdır.
Şimdi VBA döngülerinin türlerine bakalım.
Excel'de 4 tip VBA döngüsü mevcuttur:
- For Next Loop
- For Each Loop
- Do While
- Do Until
1 – For Next Loop VBA Döngüsü İçin
For…Next döngüsü, kodda belirtilen sayıda kez aynı kodu tekrarlamak için kullanılır. Burada, döngünün başlangıç ve bitiş konumunu belirtmeliyiz. For…Next LOOP, hücreler arasında döngü yapmak ve aynı eylem kümesini gerçekleştirmek için kullanılır.
Örneğin, A1 ila A10 hücrelerine 1'den 10'a kadar seri numaraları girmeliyiz. Döngünün başlangıç konumu 1 ve bitiş konumu 10'dur. Burada, döngü on kez çalışacak ve aynı eylem kümesini 10 hücrenin hepsinde tekrarlayacaktır.
Sözdizimi
Aşağıda For…Next LOOP’un sözdizimi yer almaktadır.

For…Next LOOP'ta, değişkeni atamalı ve kod bloğunun kaç kez çalıştırılması gerektiği konusunda ısrar etmek için başlangıç ve bitiş numaraları vermeliyiz. Kod, son numaraya ulaşana kadar çalıştırılmaya devam edecektir.
Örnek 1 – Seri Numaralarını Girin
Örneğin, A1'den A10'a kadar olan hücrelere 1'den 10'a kadar seri numaraları girmemiz gerektiğini varsayalım. Bunun için aşağıdaki görselde gösterildiği gibi kodu yazabiliriz.

Yukarıdaki kod A1 hücresine 1 sayısını, A2 hücresine 2 sayısını vb. ekleyecektir.

Ancak buradaki sorun, her hücre için farklı satırlarda kod yazmış olmamızdır. Bunun için toplamda 10 satır kod yazılmıştır. Bu uzun kodlardan kaçınmak için FOR NEXT LOOP kullanabiliriz.
Adım 1: Aşağıdaki görselde gösterildiği gibi Alt prosedür adını girin.

Adım 2: For…Next LOOP'u başlatmak için bir değişken tanımlayın ve veri türünü tam sayı olarak atayın.

Adım 3: Değişkenle For…Next LOOP’u açın.

Adım 4: Döngü başladıktan sonra, döngünün başlangıç ve bitiş değerlerini vermeliyiz. Bu örnekte, başlangıç sayımız 1 ve bitiş sayımız 10'dur.

Adım 5: Yürütmeyi tekrarlayacak bloğu yazmadan önce, aşağıdaki kutuda gösterildiği gibi FOR LOOP'un değişken değerini NEXT [Değişken adı] biçimindeki kelimeyi kullanarak artırmalıyız.

Adım 6: For…Next LOOP'un içinde, tekrarlanacak kodu yazacağız. Hücrelere CELLS özelliğini kullanarak başvuruyoruz.

Adım 7: CELLS özelliği için satır numarasını sağlamalıyız. Satır numarasını sabit olarak sağlamak yerine değişken adını sağlayabiliriz.

Adım 8: Daha sonra sütun indeks numarasını 1 olarak girin.

Adım 9: VALUE özelliğini seçin ve değeri k değişkenine ayarlayın.

Kodlama kısmı tamamlandı. Şimdi F8 tuşuna basarak kodu satır satır çalıştıracağız.
Adım 10: İmleci makronun içine getirin ve makroyu başlatmak için F8 kısayol tuşuna basın.

Adım 11: Değeri görmek için imleci k değişkeninin üzerine getirin.

Adım 12: Şu an itibariyle k değeri sıfırdır. F8 tuşuna bir kez daha basın ve k değişkeninin değerini görün.

k değeri 1'dir, yani döngü ilk defa çalışmaktadır ve döngünün başlangıç noktası 1'dir.
Bu nedenle k değeri şimdilik bu kod boyunca 1'dir.
Adım 13: CELLS özelliğinde , hücreye CELLS(1,1) örneğinde olduğu gibi referans veren k değişkenini sağladık, yani hücre A1 ve hücredeki değer k değişkeninin değerine, yani 1'e eşit olacaktır.
F8 tuşuna bir kez daha basıyoruz ve A1 hücresinde 1 değerini alıyoruz.

Adım 14: F8 tuşuna bir kez daha basın , kod içerisine geri dönülecek ve k değişkeninin değeri artık 2 olacak.

K değeri 2'ye eşittir, yani döngü ikinci kez çalışmaktadır ve k neredeyse orada değer 2 olacaktır.
Dolayısıyla CELL(K,1) CELLS(2,1) yani hücre A2 olacaktır.
Adım 15: F8 tuşuna basın , A2 hücresine 2 değeri eklenecektir.

Adım 16: Benzer şekilde döngü 10 kez çalışır ve k değeri 10'a ulaştığında döngüden çıkar.
Kodu tek seferde tamamlamak için F5 tuşuna bastığımızda A1'den A10'a kadar olan hücrelerde 1'den 10'a kadar olan seri numaralarını görmeliyiz.

Örnek #2 – Alternatif Hücreleri Biçimlendir
Her alternatif satır için bir miktar renk biçimlendirmesi uygulamamız gerektiğini varsayarak . Renk biçimlendirmesini uygulamak için FOR NEXT LOOP'u kullanabiliriz.
Aşağıdaki kod tüm alternatif hücreleri mavi renkle dolduracaktır.

Yukarıdaki kodu kopyalayıp Visual Basic Editor'a yapıştırın.

F5 tuşuna basarak kodu çalıştırın . Her çift satır hücresini mavi renkle doldurur.

2 – For Each Döngüsü İçin
For…Each LOOP nesneler arasında döngü oluşturmak için kullanılır. Excel'deki nesneler şunlardır:
- Açılan tüm çalışma kitapları nesnedir.
- Tüm çalışma kağıtları nesnedir.
- Tüm hücreler veya hücre aralıkları nesnedir.
- Bütün şekiller ve grafikler nesnedir.
Sözdizimi
FOR EACH LOOP'un sözdizimi aşağıdaki gibidir.

Örnek 1 – Tüm Çalışma Sayfalarını Gizle
Büyük çalışma sayfalarıyla çalışıyorsanız, çalışma sayfalarını gizlemeniz gerekebilir. FOR…EACH LOOP'u kullanarak, tüm kullanılabilir çalışma sayfalarını dolaşabilir ve gizleyebiliriz.
Örneğin, aşağıdaki çalışma kağıtlarına bakın.

“Sheet1” adlı çalışma sayfası hariç tüm çalışma sayfalarını gizlemeliyiz. Aşağıdaki kod tüm çalışma sayfalarını dolaşacak ve onları gizleyecektir.

Bu, “Sheet1” adlı çalışma sayfası haricindeki tüm çalışma sayfalarını gizleyecektir.

Örnek 2 – Tüm Çalışma Sayfalarını Göster
Çalışma sayfaları gizlendikten sonra, tek bir tıklamayla onları görünür hale getirmemiz gerekebilir. Aşağıdaki kod tüm çalışma sayfalarını görünür hale getirecektir.

Bu, çalışma kitabındaki tüm gizli sayfaları gösterecektir.
3 – Do While VBA Döngüsü
Do…While Döngüsü, uygulanan koşul karşılandığında veya TRUE olduğunda bir döngüyü çalıştırmak için kullanılır. Do While Döngüsü için iki tür sözdizimi mevcuttur.
Sözdizimi #1

Sözdizimi #2

1 sözdiziminde, döngü başlayacak ve koşulun TRUE olup olmadığını test edecektir. Koşul TRUE iken döngü içindeki kodu yürütecektir. FALSE olduğunda, döngüden çıkacaktır.
2 sözdiziminde, döngü başlayacak ve döngü içindeki kodu yürütecek, sonra sonunda koşulu test edecektir. Koşul TRUE ise, yalnızca o zaman döngüye geri dönecektir veya aksi takdirde döngüden çıkacaktır.
Örneğin aşağıdaki koda bakın.

Yukarıdaki kod 1'den 10'a kadar olan değerleri ekleyecektir.
- Öncelikle k değişkeninin değerini 1 olarak ayarlamalıyız.
- Daha sonra şu koşulu uygulamalıyız. k değeri 10'dan küçükken A sütununa seri numaralarını girelim.
- Daha sonra, döngünün içinde, döngü her çalıştığında k değerini 1 artırıyoruz. k değeri 10'dan küçük olduğu sürece, döngü içindeki kodu çalıştırmaya devam ediyor ve k değeri 10'dan büyük olduğunda, döngüden çıkıyor.
4 – VBA Döngüsüne Kadar Yapın
Do…Until Döngüsü, Do…While Döngüsü'ne benzerdir. Do…Until Döngüsü, koşulu TRUE olana kadar çalışır ve Do…While döngüsü, koşul TRUE olduğu sürece çalışır.
Aynı kodu Do…While örneğinden de alabiliriz.

Önceki kodda yaptığımız tek değişiklik While yerine Until kelimesini eklememiz ve koşulu >10 olarak değiştirmemiz oldu.
Bu döngü, değişken k değeri 11'e ulaşana kadar çalışmaya devam edecek ve değerler ekleyecektir. Değişken k değeri >10'a ulaştığında döngüden çıkacaktır.
Dikkat Edilmesi Gereken Önemli Noktalar
- Hem FOR…NEXT hem de FOR…EACH VBA döngüleri için Next kelimesini döngünün sonuna koymak gerekir .
- Excel'deki nesneler Hücre, Hücreler, Çalışma Sayfaları, Çalışma Kitapları, Grafikler ve Şekiller'dir.
- Eğer koşulu Do While ve Do…Until döngüsünün en altına koyarsanız, döngü önce kodu çalıştıracak ve ardından koşulu test edecektir.
- CELLS, VBA'da bir özelliktir. Hücrenin özelliğinin satır numarası için her zaman bir değişken adı sağlayın.
