Die For-Each-Schleife in VBA

Each1

Mit diesem Beitrag endet die kleine Serie um die Schleifen in VBA.

Die For-Each-Schleife ist eine hochinteressante Angelegenheit. Sie arbeitet nicht mit Wahrheitswerten oder Zählern, sondern mit Objekten, die Auflistungen enthalten. Wieviele Elemente die Auflistung hat, ist nicht weiter wichtig, denn „For-Each“ durchläuft alle Elemente eines Bereiches, soweit die gesetzten Bedingungen erfüllt sind.

Anhand von drei Beispielen soll dir die Wirkungsweise der For-Each-Schleife erläutert werden.

1. Namen aller Arbeitsblätter mit einer MsgBox anzeigen

Du willst Dir durch eine MsgBox die Namen aller Arbeitsblätter (Worksheets) dieser Arbeitsmappe (ThisWorkbook) anzeigen lassen. Dazu deklarierst Du die Variable wsBlatt und schreibst den restlichen Code.

Sub Each1()

Dim wsBlatt As Worksheet

For Each wsBlatt In ThisWorkbook.Worksheets

MsgBox wsBlatt.name

Next wsBlatt

End Sub

Die MsgBox teilt Dir nun nacheinander die Namen aller Arbeitsblätter in Deiner Arbeitsmappe mit. Sind das mehr als 10, hast Du sicher ein Problem damit, jedesmal „OK“ auf der MsgBox zu klicken. Dir nur einen Teil anzeigen zu lassen, ergibt keinen Sinn, dann musst Du nicht mit „For-Each“ arbeiten.

Alternativ könntest Du Dir die Namen in einem Arbeitsblatt auflisten lassen, z.B. so: Du deklarierst zusätzlich eine Zählvariable und ordnest ihr z.B. den Wert 499 zu, das soll die erste Zeile sein.

Sub Each2()

Dim intZähler As Integer

Dim wsBlatt As Worksheet

intZähler=499

For Each wsBlatt In ThisWorkbook.Worksheets

Range(„H“&intZähler)=wsBlatt.name

intZähler=intZähler+1

Next wsBlatt

End Sub

Each1

2. Zahlen fett schreiben, wenn der Wert größer ist als …

Im nächsten Beispiel greifst Du auf einen Bereich mit Zahlenwerten zu. Alle Zellen in einem manuell markierten Bereich sollen fett geschrieben werden, wenn deren Wert größer als 150 ist. Im Bereich H514:H525 markierst Du ein paar Zellen (z.B. H515:H519) und lässt anschließend das folgende Makro laufen:

Sub Each3()

Dim objZelle As Object

For Each objZelle In Selection

If objZelle.Value > 150 Then

objZelle.Font.Bold = True

End If

Next objZelle

End Sub

Each2

Das hat dann auch so funktioniert.

3. Werte des aktuellen Datenfeldes mit MsgBox anzeigen

In einem letzten Beispiel lässt Du Dir durch eine MsgBox die Werte des aktuellen Datenfeldes mitteilen: Dazu deklarierst Du zwei Variablen vom Typ Range (Bereich). Einmal rngZelle, das ist die gerade aktive Zelle und einmal rngWerte, das ist der Bereich, in dem Du schrittweise die Werte abfragst.

Sub Each4()

Dim rngZelle As Range

Dim rngWerte As Range

Set rngWerte=Range(„H531:H535“)

For Each rngZelle In rngWerte

MsgBox „Aktuelles Element hat den Wert: “ & rngZelle

Next

End Sub

Each3

Neu in diesem Code ist das Referenzieren, das geschieht durch die Anweisung „Set“.

Damit bin ich mit der Artikelserie rund um die VBA-Programmierung von Schleifen am Ende. In fünf Teilen habe ich Dir an einfachen Beispielen gezeigt, worum es geht und was Du so mit Schleifen machen kannst. Bestimmt werden Dir viele viele andere Anwendungsfälle einfallen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

WordPress Cookie Plugin von Real Cookie Banner