Bu makalede, VBA'da kullanılan farklı döngü türlerini ve bunların aynı görevi farklı şekillerde gerçekleştirmek için nasıl kullanılacağını ele aldık.
Neden Döngüler?
Döngü, birçok programlama dilinde kullanılan en güçlü programlama tekniklerinden biridir. Döngü, bir kod bloğunu gerekli sayıda veya belirli bir koşul doğru olarak değerlendirilene veya belirli bir değere ulaşılana kadar tekrarlamak için kullanılır, ardından bir sonraki kod bloğu yürütülür.
Excel VBA döngüsünün amacı, Excel'in bir kod parçasını belirli sayıda tekrar etmesini sağlamaktır. Bir kodun kaç kez tekrarlanması gerektiğini sabit bir sayı olarak (örneğin bunu 10 kez yapın) veya bir değişken olarak (örneğin bunu veri satırları olduğu kadar yapın) belirtebilirsiniz.
Excel Döngüleri, farklı koşullara uyacak şekilde farklı şekillerde oluşturulabilir. Çoğu zaman, kişisel tercihlerinize uyacak şekilde aynı sonuçlar farklı şekillerde elde edilebilir.
Excel VBA'da kullanılabilen üç farklı döngü türü vardır:
1. Döngüye KADAR YAPIN
2. WHILE Döngü Yapın
3. Döngü İÇİN
1. Döngüye KADAR YAPIN
DO UNTIL Döngüsü, belirtilen koşul True olarak ayarlanana kadar bir kod bloğunu süresiz olarak tekrarlamak için kullanılır. Koşul, Döngünün başında veya sonunda kontrol edilebilir. DO UNTIL… LOOP deyimi başlangıçtaki koşulu test ederken, DO… LOOP UNTIL deyimi Döngünün sonundaki koşulu test eder.
DO UNTIL… LOOP ifadesinin sözdizimi
[Koşul]'a Kadar Yap
[Tekrarlanacak kod bloğu]
Döngü
DO… LOOP UNTIL ifadesinin sözdizimi
Yapmak
[Tekrarlanacak kod bloğu]
[Koşul]'a Kadar Döngü
DO…UNTIL döngüsünü bir örnekle açıkladık. Döngü1 ve Döngü2 makroları, DO…UNTIL döngüsünü kullanarak A sütunu ve B sütunundaki sayıların ortalamasını hesaplamak için kullanılır.
Örnek veriler A15:B27 aralığında mevcuttur. A Sütunu 1. Tur puanlarını ve B sütunu 2. Tur puanlarını içerir. C sütunundaki 1. Tur ve 2. Turdaki puanların ortalamalarını hesaplamak istiyoruz.
Loop1 makrosunda aktif hücreye ortalama formül eklemek için “FormulaR1C1” kullandık. DO UNTIL döngüsündeki koşul ifadesi döngünün sonunda kontrol edilir.
Loop2 makrosunda aktif hücreye ortalama değer eklemek için “WorksheetFunction.Average” kullandık. Bu makroda bile döngü sonunda koşul ifadesi kontrol edilir.
Döngü1 ve Döngü2 makrosu arasındaki tek fark, Döngü1'in ortalama formülü eklemesi, Döngü2'nin ise ortalamayı hesaplaması ve ardından ortalama değeri etkin hücreye eklemesidir.
2. WHILE Döngü Yapın
DO WHILE Döngüsü, belirtilen koşul True olmaya devam ederken ve koşul False döndürdüğünde dururken, bir kod bloğunu belirsiz sayıda tekrarlamak için kullanılır. Koşul, Döngünün başında veya sonunda kontrol edilebilir. DO WHILE… LOOP deyimi başlangıçtaki koşulu test ederken, DO… LOOP WHILE deyimi döngünün sonundaki koşulu test eder. DO… LOOP WHILE ifadesi, koşulu kontrol etmeden önce döngünün kod bloğunu en az bir kez çalıştırmasını istediğimizde kullanılır.
DO WHILE… LOOP ifadesinin sözdizimi
[Koşul] Yaparken
[Tekrarlanacak kod bloğu]
Döngü
DO… LOOP WHILE ifadesinin sözdizimi
Yapmak
[Tekrarlanacak kod bloğu]
Döngü [Koşul]
Bu örnekte, Döngü3 ve Döngü4 makroları, A sütunu ve B sütunundaki hücrelerdeki değerlerin ortalamalarını hesaplamak için kullanılır. Her iki makro da Döngü1 ve Döngü2 makroları tarafından kullanılanla aynı örnek veriler üzerinde çalışır. Her ikisi de verileri içeren aralıkta dolaşmak için DO WHILE deyimini kullanır.
Loop3 ve Loop4 makroları arasındaki tek fark, DO WHILE döngüsünün koşullarını temsil etmenin farklı yolları olmalarıdır.
Döngü3 ve Döngü4 makroları aynı giriş verilerini kullandığından ve hatta Döngü1 makrosu ile aynı işlevleri yerine getirdiğinden, döndürülen çıktı da Döngü1 makrosu ile aynı olacaktır.
3. FOR döngüsü
For Loop, bir kod bloğunu belirli sayıda tekrarlamak için kullanılır.
FOR döngüsünün sözdizimi
count_variable için = start_value için end_value için
[kod bloğu]
Sonraki sayı_değişkeni
Loop5 makrosu, ortalamayı hesaplamak için FOR döngüsünün nasıl kullanılacağını gösterir. Ayrıca diğer makrolar tarafından kullanılan aynı örnek verileri kullanır. Örnek veriler 15'ten başladığı için başlangıç değeri olarak 15 kullandık.NS sıra. Veri içeren son satırı bulmak için Range("A" & Cells.Rows.Count).End(xlUp).Row kullandık. FOR döngüsü (lastcell-15) sayıda tekrar edecektir.
Döngü5 makrosu çalıştırıldıktan sonra döndürülen çıktı, Döngü1 makrosu ile aynıdır.
Loop6 makrosu, ancak ortalama işlevine sahip olacak aktif hücre, makroyu çalıştırmadan önce boşsa, ortalamayı hesaplamak için oluşturulur.
Bu makro için örnek veriler E15 ila G27 aralığında mevcuttur.
Tanımlanan aralıkta dolaşmak için DO… LOOP WHILE kullandık. EĞER deyimi, fonksiyonun ekleneceği hücrenin bir değer içerip içermediğini kontrol etmek için kullanılır. Bu makro, yalnızca boşsa hücreye ortalama işlevi ekler.
Loop7 makrosu da ortalamayı hesaplamak için kullanılır. Tekrar döngü yapılıp yapılmayacağını değerlendirmeden önce yardımcı sütundaki değerleri kontrol eder. Ayrıca ortalama işlevinde kullanılacak hücre başvurusunun boş olup olmadığını da kontrol eder.
Loop7 makrosu için kullanılan örnek veriler J15:M27 aralığındadır.
Sütun M, yardımcı sütun olarak kullanılır. Bu makro, yalnızca M sütunundaki bir hücre boş değilse bir ortalama işlevi ekler. Bu makro, içine ortalama bir işlev eklemeden önce bir hücrenin boş olup olmadığını kontrol eder. Ortalama işlevinde başvurulan hücre boşsa, ortalama işlevi eklemez.
Lütfen kod için aşağıdan takip edin
Seçenek Explicit Sub Loop1() 'Ortalama' Hesaplanana Kadar Döngüsü, aktif hücrenin önceki sütunundaki hücre boş olana kadar döngü yapacaktır Aralık ("C15"). ActiveCell önceki iki ardışık sütunun hücrelerinde değere ortalama fonksiyon atama Yap'ı seçin. FormulaR1C1 = "=Average(RC[-1],RC[-2])" 'Sonraki satırdaki hücreye taşınıyor ActiveCell.Offset(1, 0).'Önceki sütunun hücresindeki değerin boş olup olmadığı kontrol ediliyor' seçeneğini seçin. döngü, koşul ifadesi dönene kadar döngü yapacaktır True Loop Before IsEmpty(ActiveCell.Offset(0, -1)) Range("A15").Select End Sub Sub Loop2() 'Ortalama 'Yapılana Kadar Döngü, bir önceki hücreye kadar döngü yapacaktır. aktif hücrenin sütunu boş 'Bu makro makro Loop1'e benzer, sadece ortalamayı hesaplamanın yolu farklı Aralık("C15").Yap'ı seçin.Çalışma sayfası.Average fonksiyonu ortalama ActiveCell'i hesaplamak için kullanılır.Value = WorksheetFunction.Average( ActiveCell.Offset(0, -1).Value, _ ActiveCell.Offset(0, -2).Value) ActiveCell.Offset(1, 0).Boşa Kadar Seçim Döngüsü(ActiveCel) l.Offset(0, -1)) Range("A15").Select End Sub Sub Loop3() 'Ortalama 'Do while döngüsü, aktif hücrenin önceki sütunundaki hücre boş olana kadar çalışacaktır Aralık("C15") .'Önceki sütunun hücresindeki değerin boş olup olmadığı kontrol ediliyor' seçeneğini seçin 'Do while döngüsü, koşul ifadesi True olana kadar döngü yapacaktır. iki ardışık sütun ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])" 'Sonraki satırdaki hücreye taşınıyor ActiveCell.Offset(1, 0).Select Loop Range("A15").Select End Sub Sub Loop4() 'Ortalama hesaplanıyor' Do while döngüsü, aktif hücrenin önceki sütunundaki hücre boş olana kadar çalışacaktır 'Bu makro, Loop3 makrosuna benzer, sadece koşul uygulama yolu farklı Aralık("C15").Seç IsEmpty Değilken Yap(ActiveCell.Offset(0, -1)) ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])" ActiveCell.Offset(1, 0).Select Loop Range(" A15").Select End Sub Sub Loop5() 'FOR döngüsü, sabit bir uyuşma için tekrarlar er kez satır sayısı ile belirlenir Dim i, lastcell As Long 'A sütunundaki verileri içeren son satırı bulma lastcell = Range("A" & Cells.Rows.Count).End(xlUp).Row Range("C15 ").Seçin 'i değişkenine 15 değeri atanır, örnek verilerimiz 15. satırdan başlar 'FOR Döngüsü döngüye girer x For i = 15 ActiveCell'in son hücresine.FormulaR1C1 = "=Average(RC[-1],RC[-2] ])" ActiveCell.Offset(1, 0).Sonraki i Aralık'ı seçin("A15").Select End Sub Sub Loop6() 'Ortalama 'Yapılana Kadar Döngüsü, aktif hücrenin önceki sütunundaki hücre boş olana kadar döngü yapacaktır' Range("G15") hücresinde zaten bir şey varsa, bir ortalama hesaplamaz. IsBoşsa Yap(ActiveCell) Then ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])" öğesini seçin. End If ActiveCell.Offset(1, 0).Select Loop Before IsEmpty(ActiveCell.Offset(0, -1)) Range("E15").Select End Sub Sub Loop7() 'Yapılana Kadar Döngü var olduğu sürece çalışır sonraki sütundaki hücrede bir şey 'Aktif c'de zaten bir şey varsa, ortalama hesaplamaz ell 'Normal fonksiyon içinde kullanılan hücrelerde veri yoksa (#SAYI/0 hatalarını önlemek için). 'Ortalama Aralık hesaplanıyor("L15").Boşsa Yap(ActiveCell) Sonra IsBoşsa(ActiveCell.Offset(0, -1)) Ve IsBoş(ActiveCell.Offset(0, -2)) Sonra ActiveCell.Value = " " Else ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])" End If End If ActiveCell.Offset(1, 0).IsBoşa Kadar Döngü Seç(ActiveCell.Offset(0, 1)) Aralık ("J15"). End Sub'ı seçin
Bu blogu beğendiyseniz, Facebook'ta arkadaşlarınızla paylaşın. Ayrıca bizi Twitter ve Facebook'ta da takip edebilirsiniz.
Sizden haber almayı çok isteriz, işimizi nasıl geliştirebileceğimizi ve sizin için nasıl daha iyi hale getirebileceğimizi bize bildirin. E-posta sitesinde bize yazın