FOR EACH STATEMENT

VBA Excel Makro For Each Dongusu Dersi ve Çozumlu Ornekler

İÇİNDEKİLER

1- Excel VBA For Each Döngüsü Nedir?

 

    Excel VBA For Each döngüsü bir ‘Collection’ içerisinde yer alan bütün nesnelerin üzerinde sırayla işlem yapabilmemize olanak verir. Bu aşamada ‘collection’ bize biraz yabancı olduğu için ilk önce VBA’de Collection nedir onu öğrenelim. 

    ‘Collection’ = Belirli bir veri tipinde tanımlanan nesneye ait ‘*property’ ve ‘**method’ ların taplamıdır.  Bir örnek ile devam etmek istersek Worksheets ve Workbooks birer ‘collection’ dur. Bu iki farklı veri tipine ait olan collection’larda ‘Add’, ‘.Count’, gibi ortak metotlar bulunabilmekte ve bunlara ek her ‘collection’ın kendine ait metot ve property’leri de bulunabilmektedir. Excel içerisinde çok sayıda gömülü ‘collection’ vardır. Eğer biz bir ‘Worksheets’ collection’ına ait bir değişken tanımlarsak, bu tanımladığımız değişken, tanımlanmış olduğu tipteki ‘collection’ a ait ne kadar metot ve property varsa, onlara da sahip olur.  Dersin ilerleyen aşamalarında örneklerle birlikte burada verilmek istenen teorik bilgi daha sağlam temellere oturacaktır.                                                                                                                                                                                                           * method= Nesneler üzerinde yapılan kopyalama yapıştırma gibi eylemlere verilen ad, **property=Nesnelere ait renk, font gibi özellikler.

    Excel VBA For Each döngüsünü kullanabilmek için ilk önce hangi nesneler üzerinde çalışılmak isteniyorsa, o nesneyi değişken olarak tanımlamamız gerekiyor. Mesela eğer çalışma sayfaları üzerinde kopyalama veya çalışma sayfalarının adını yazdırma gibi bir işlem yapmak istiyorsak değişkenimizi Worksheet Collection’a ait bir nesne olarak tanımlıyoruz.

    Dim Sayfa as Worksheet yazarak Sayfa değişkenini bir NESNE(OBJECT) olarak tanımlamış oluyoruz. Ve artık sayfa nesnesi(değişkeni) Worksheet Collection içerisindeki bütün metot ve özellikleri almış olur. Excel VBA For Each Döngüsü

    

Excel VBA For Each Döngüsü Örnek 1

    Sol tarafta bir worksheet nesnesini ve bu nesneye ait metot ve property’leri IntelliSense listesinde görüyorsunuz. 

    Sağ tarafta ise Worksheet olarak tanımlanan bir değişkenin nasıl worksheet collection’a ait bütün property ve methodları alabildiğini görüyorsunuz. Bu durum bizim kod yazmamızı çok kolaylaştıran bir durumdur.

Excel VBA For Each Döngüsü Örnek 2

    For Next döngüsünde nasıl belirlediğimiz bir aralıkta daha doğrusu bir sırada işlem yapılmasını belirtiyorsak, For Each döngüsünde ise hangi nesne grubunda işlem yapılmasını belirliyoruz. Yani eğer Sayfa değişkenini bir Worksheet olarak tanımladıysak, artık For Next döngüsünde olduğu gibi bir değişken ile index numarası belirterek hangi sayfalarda işlem yapılacağına karar vermemiz gerekmiyor, boştan sona döngü bütün worksheet collection’a ait nesnelerde gerçekleşiyor. 

    Karşılaştırmalı bir kodu inceleyelim.

Excel VBA For Each Döngüsü Örnek 3

Solda gördüğümüz örnek, For Each döngüsünün Workbook içerisinde yer alan bütün worksheetler üzerinde gezinmesini sağlayan Sub-Routine’dir. 

 

Sağdaki i Sub-Routine ise bir önceki dersin konusu olan For – Next döngüsünün, yine workbookta yer alan bütün worksheetler üzerinde gezinmesini sağlayan koddur. 

Excel VBA For Each Döngüsü For Next Döngüsü KArşılaştırma Örneği

    For Each döngsünde sadece değişkenimizi bir nesne olarak tanımlayarak yaptığımız işlemi, For Next döngüsü ile yapmak istediğimizde iki adet daha değişken tanımlamamız ve tanımladığımız değişkene ise bir değer atamamız gerekiyor. For Eacg döngüsünde ise nesneler zaten belli olduğu için, bizim durumumuzda nesne worksheetler, herhangi bir ek bildirime gerek yoktur.

    Genelde neden olunduğu bilinmez ancak bu ikisinin birbirlerine karşı avantaj ve dezavantajları listelenir. Ben burada bu karşılaştırmaya yer vermeyeceğim. Çünkü benim görüşüme göre For Next  ve For Each bizim işimizi kolaylaştırmak için üretilmiş, birbirinin eksikliklerini çok iyi bir şekilde kapatabilen harika birer döngü araçlarıdır. Kendinizi farklı döngüler oluştururken bulduğunuzda nerede For Next Nerede For Each döngüsünün kodunuz için daha uygun olduğunun ayrımını rahatça yapabileceksiniz.

ORNEK-1 

For Each Döngüsü ile Worksheet Nesneleri Üzerinde Yapılabilecek Basit İşlemlere Ait Örnekler

    İlk önce yazmış olduğumuz Sub-Routine’i sizinle paylaşmak istiyorum. Bu sayede satır satır kodları sırayla inceleyebiliriz. Kodun incelemesi bittikten sonra da nasıl çalıştığını alt kısıma eklenmiş olan video üzerinden gerçekleştirebilirsiniz.

    Sayfa_Isimleri adlı Sub-Routine ile For Each döngüsünde kullanacağımız sayfa isimlerini kendi istediğimiz yönde değiştiriyoruz. Artık sayfalara ait Property penceresinde Name hücresinin yanında Sheet1, Sheet2, Sheet3 yerine, Araba İlanları, Ticari Arac İlanları ve Ev İlanları yazıyor.

     Baslık_At Sub-Routine’i ile de Sayfa_Isimleri Sub-Routine’i ile worksheetlere verdiğimiz isimleri her sayfanın C1 hücresine yazdırmayı istiyoruz. Bu kapsamda Sub-Routine’i numralandırılmış kısımlar halinde inceleyelim ve işlemin nasıl gerçekleştiğini görelim.

    1.Ilanlar değişkenini bir Worksheet nesnesi olarak tanımlıyoruz. 

    2. 2 ve 2′ rakamları arasında kalan kısım nesneler üzerinde döngü gerçekleştirmemezi sağlayan For Each döngüsüdür. Worksheets nesnesi olarak tanımlanan Ilanlar değişkeninin, her worksheets nesnesi için, döngünün içinde yer alan komutların gerçekleşeceğini bu kısımda belirtiyoruz. 

    2.1 Ilanlar değişkeninin yerini aldığı worksheet üzerindeki “C1” hücresine, o worksheet’in adını yazdırıyoruz.

    2.2 “C1” hücresnin sütun genişliğini 20 birim yapıyoruz.

    2.3 “C1” hücresinin içindeki yazının rengini değiştiriyoruz.  

    2.4 “C1” hücresinin içindeki yazının karakterini kalın yapıyoruz.

    2.5 “C1” hücresinin etrafına kesiksiz çizgi ile sınır koyuyoruz ve çizgi kalınlığını kalın yapıyoruz.

    2′ For Each döngüsünün bittiği satırdır.

Excel VBA For Each Döngüsü Başlık Atama Örneği

ORNEK-2 

For Each Döngüsü Ile Sub-Routine’in Olduğu Workbook Dışındaki Workbook’ları Kapatmak

    Açık olan birden fazla workbook olduğunu düşünelim. Eğer tek tek girip de workbookları kapatmak istemiyorsak veya yaptığımız işlemden sonra sadece tek workbook’un açık kalmasını tercih ediyorsak, o zaman basit bir For Each döngüsü ile workbookların kapanmasını sağlayabiliriz. İster 5 adet isterse 100 adet açık workbook olsun. Kod sayılarından bağımsız olarak bütün workbook nesnelerini kapatacağı için farklı sayıda workbook kapatmak işleminde aynı kodu kullanmamızda sakınca yoktur. Sadece burada For Next döngüsündeki gibi indeks ile bir sınırlandırma yapamadığımız için, bu sefer If bloğu ve kapatmak istemediğimiz workbook adı ile istediğimiz sayfayı kapatılacak sayfalardan ayırabiliriz. Bir de ‘ThisWrokbook’ olayı var. Gelin onu da Sub-Routine içerisinde inceleyelim.

    Yukarıda yer alan her iki Sub-Routine de aynı şekilde iş görür. Yani bir adet workbook dışındaki diğer bütün workbookları kaptır. Ancak aralarında bir fark var. Solda yer alan Sub-Routine’de kapatılmasını istemediğimiz workbook adını kendimiz gireriz(uzantısıyla birlikte). Ama sağdaki Sub-Routine’de ise ThisWorkbook.Name kullanarak, Sub-Routine’in yazılmış olduğu workbook adını kullanarak bu işlemi yaparız. Kısaca ThisWorkbook ibaresi Sub-Routine’in kayıtlı olduğu workbook’u ifade eder. 

    ThisWorkbook ibaresinin kullanılması ise Sub-Routine’in kayıtlı olduğu workbook’un isminin değiştirildiği anlarda, bizi yaşanabilecek karışıklıklardan korur.

Döngülerler ilgili diğer derslere ait sayfalara tuşlara tıklayarak geçebilirsiniz;

 

 

Dünya Çapında Araştırmacılara Ait Çalışmaları Okumak İsterseniz https://www.researchgate.net/profile/Ender_Dagdelen adresini Ziyaret Edebilirsiniz. Ana Sayfaya Dönmek İsterseniz De Aşağıdaki Tuşu Tıklayınız.

İyi Çalışmalar…

Soru ve Öneriler İçin;

[email protected]