VBA Döngüler – II For Each Döngüsü


For Each Döngüsü,  For .. Next Döngüsü ile aynı mantıkla çalışır. For Each Döngüsü For döngüsünden farklı olarak belli bir koleksiyona ya da diziye ait elemanlar üzerinde döner. Koleksiyon olarak nitelendirdiğimiz nesnelerin tipi hücre olabileceği gibi Workbook sayfası, UserForm kontrolü, hücre aralığı ya da Özet Tablo olabilir.

  1. For Each Döngüsü ile belirlediğimiz aralıktaki her hücreye “excel” yazdırma
  2. For Each Döngüsü ile Sayfa İsimlerini Değiştirme
  3. For Each Döngüsü ile Boş Hücreleri Gizleme
  4. For Each Döngüsü ile Aktif Sayfadaki Özet Tablo isimlerini alma
  5. For Each Döngüsü ile Tum Sayfalardaki Özet Tablo isimlerini alma

For Each eleman in koleksiyon

komutlar

Next eleman

1.For Each Döngüsü ile belirlediğimiz aralıktaki her hücreye “excel” yazdırma:

Basit örnekle başlayarak öncelikle For Each döngüsünü ve For döngüsünden farkını anlamaya çalışalım.

ilk olarak Range(“A1:D10”) aralığındaki her bir hücreye “excel” yazdıralım.

For Döngüsü ile:


Sub fordongu()

Dim satır As Integer

Dim sutun As Integer

For sutun = 1 To 4 'veriyi satırlar ve sütunlar boyunca yazdıracağımız için iç içe döngü kullanmak zorunda kaldık

For satır = 1 To 10

Cells(satır, sutun).Value = "excel"

Next satır

Next sutun

End Sub

For Each ile :


Sub foreachdongu()

Dim rng As Range 'Range yani hücre tipinde bir rng değişkeni tanımladık

For Each rng In Range("A1:D10") 'verilen aralıktaki tüm hücreleri tek tek dolaş

rng.Value = "excel" ' her birinin değerine ilgili metni yaz.

Next rng

End Sub

*Her iki döngünün de çıktısı aynı olmakla beraber For Each döngüsü bize daha kısa ve kolay bir kod sundu.

foreach
Not: For Each Döngüsünü kullanırken üzerinde dolaşılacak koleksiyon tipinde eleman tanımlamayı unutmamak gerekir, yani:

Yukarıdaki kodu yazarken rng değişkenini range yerine integer olarak tanımlasaydık aşağıdaki gibi derleme hatası alacaktık. Çünkü rng değişkeni integer değil bir hücredir.


Sub foreachdongu()

Dim rng As integer 'hatalı tanımlama

For Each rng In Range("A1:D10")

rng.Value = "excel"

Next rng

End Sub

foreach

2.For Each Döngüsü ile Sayfa İsimlerini Değiştirme:

Elimde 4 sayfalı bir çalışma kitabı var ve bu çalışma kitabındaki her bir sayfanın adını 1,2,3,4 şeklinde değiştirmek istiyorum.

foreach

 


Sub foreachdongu()

Dim sayfam As Worksheet      'sayfam isminde worksheet tipinde bir değişken tanımladım

Dim i As Integer

i = 1     'başlangıç değeri 1 olan integer bir i değişkeni atadık.

For Each sayfam In ActiveWorkbook.Worksheets     'aktif kitabımın tüm sayfaları içinde tek tek gez

sayfam.Name =  i

i = i + 1  'i değerini her bir sayfada 1 arttır.

Next sayfam

End Sub

foreach2

 

3.For Each Döngüsü ile Boş Hücreleri Gizleme:

Aşağıdaki tabloda verisiz hücrelerin olduğu tüm satırı gizlemek istiyorum. Yine For Each döngüsü kullanacağım.

foreach


Sub bossatirgizle()

Dim rng As Range     'rng isimli değişkeni bir hücre olarak tanımladım. değişken ismini dilediğiniz gibi verebilirsiniz.

For Each rng In Range("A1:A21")

If IsEmpty(rng) = True Then      'eğer üzerindeki hücremin değeri boş ise

rng.EntireRow.Hidden = True    'hücrenin buunduğu satırı gizle

End If

Next rng

End Sub

 

foreach
4.For Each Döngüsü ile Aktif Sayfadaki Özet Tablo isimlerini alma:

Şimdi özet tablo koleksiyonunda tablolar içerisinde gezelim ve sayfamızdaki özet tabloların isimlerini hücreye yazdıralım:
Bir excel sayfasına 4 adet özet tablo ekledim.

foreach

Şimdi bu özet tabloların isimlerini 4. sütuna sırayla yazdıralım:


Sub ozettabloadi()

Dim pvt As PivotTable   'pvt isimli tipi pivot tablo olan değişken tanımladım

Dim i As Integer

i = 1

For Each pvt In ActiveSheet.PivotTables

Cells(i, 4).Value = pvt.Name

i = i + 1

Next pvt

End Sub

foreach2

5.For Each Döngüsü ile Tum Sayfalardaki Özet Tablo isimlerini alma:

Calisma kitabindaki tum ozet tablo isimlerini ve ozet tablolarin bulundugu sayfalari “Sheet1” e yazdiralim.


Sub ozettabloadi()

Dim pvt As PivotTable

Dim sht As Integer

Dim i As Integer

i = 1

For sht = 1 To Worksheets.Count

Sheets(sht).Select

For Each pvt In ActiveSheet.PivotTables

Sheets("Sheet1").Cells(i, 3).Value = pvt.Name

Sheets("Sheet1").Cells(i, 3).Value = pvt.SourceData

Sheets("Sheet1").Cells(i, 1).Value = ActiveSheet.Name

Sheets("Sheet1").Cells(i, 2).Value = ActiveSheet.Index

i = i + 1

Next pvt

Next sht

End Sub

ya da:


Sub ozettabloadi()

Dim pvt As PivotTable

Dim sht As Worksheet

Dim i As Integer

i = 1

For Each sht In ActiveWorkbook.Sheets

For Each pvt In ActiveSheet.PivotTables

Sheets("Sheet1").Cells(i, 1).Value = pvt.Name

Sheets("Sheet1").Cells(i, 2).Value = pvt.SourceData

Sheets("Sheet1").Cells(i, 3).Value = sht.Name

Sheets("Sheet1").Cells(i, 4).Value = sht.Index

i = i + 1

Next pvt

Next sht

End Sub

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s