Excel VBA - Schleifen (Loops) im Bereich debuggen

Im Beitrag „Excel VBA – Arbeitsbereich (Range) definieren“ haben Sie verschiedene Ansätze kennengelernt, um einen Bereich zu definieren. Oft werden Sie alle Zellen in diesem Bereich über eine Schleife verarbeiten. In diesem Artikel stelle ich einen einfachen Weg vor, um diese Loops zu debuggen.

111 VBA Makros die Ihr Leben leichter machen. Egal ob Sie Einsteiger oder fortgeschrittener Anwender sind – in diesem Buch finden Sie Lösungen für Ihre alltäglichen Aufgaben. Keine Vorkenntnisse notwendig.

Dieser Beitrag ist ein Teil der VBA Grundlagen Serie.

Betrachten wir das folgende Beispiel. Unsere Tabelle beinhaltet im Bereich E3 bis H10 die für uns relevanten Daten. Wir möchten in einer Schleife alle Zellen durchlaufen und prüfen, ob ein Wert höher als 200.000 vorhanden ist.

Das Makro dazu könnte wie folgt aussehen:

Sub BeispielDebug()

Dim rngMeinBereich As Range
Dim rngZelle As Range
Dim lngLetzteZeile As Long

'Letzte Zeile finden
With Tabelle2
    lngLetzteZeile = .Range("H" & .Rows.Count).End(xlUp).Row
'Beachten Sie, dass bei diesem Ansatz alle ausgeblendeten Zeilen übersprungen werden.
End With

Set rngMeinBereich = Tabelle2.Range("E3:H" & lngLetzteZeile)

For Each rngZelle In rngMeinBereich

    If rngZelle.Value > 200000 Then
    MsgBox "Wert in Zelle " & rngZelle.Address & " gefunden.", vbExclamation, "Treffer!"
    Exit For
    End If

Next rngZelle

End Sub

Allerdings kann sich der Bereich verändern – es können neue Zeilen dazukommen. Daher müssen wir zunächst prüfen, ob wir überhaupt den richtigen Bereich selektiert haben. Dies können Sie ganz einfach machen, in dem Sie über Debug.Print die Koordinaten des Bereichs ausgeben: Debug.Print rngMeinBereich.Address. Nun sieht das Makro so aus:

Sub BeispielDebug()

Dim rngMeinBereich As Range
Dim rngZelle As Range
Dim lngLetzteZeile As Long

'Letzte Zeile finden
With Tabelle2
    lngLetzteZeile = .Range("H" & .Rows.Count).End(xlUp).Row
'Beachten Sie, dass bei diesem Ansatz alle ausgeblendeten Zeilen übersprungen werden.
End With

Set rngMeinBereich = Tabelle2.Range("E3:H" & lngLetzteZeile)
'welcher Bereich wird überhaupt verarbeitet?
Debug.Print rngMeinBereich.Address


For Each rngZelle In rngMeinBereich

    If rngZelle.Value > 200000 Then
    MsgBox "Wert in Zelle " & rngZelle.Address & " gefunden.", vbExclamation, "Treffer!"
    Exit For
    End If

Next rngZelle

End Sub

Die Koordinaten des Bereichs werden im Direktbereich ausgegeben.

Ausgabe im VBA Direktbereich

Nachdem wir sichergestellt haben, dass wir überhaupt mit dem richtigen Bereich arbeiten, wollen wir schauen, welche Zelle gerade verarbeitet wird, welchen Wert diese Zelle trägt und welche Formatvorlage verwendet wird. Dies können wir über die Eigenschaften Address, Value und Style herausfinden. Über Debug.Print zeigen wir die Ergebnisse im Direktfenster.

Debug.Print rngZelle.Address
Debug.Print rngZelle.Value
Debug.Print rngZelle.Style

Das gesamte Makro würde nun wie folgt aussehen:

Sub BeispielDebug()

Dim rngMeinBereich As Range
Dim rngZelle As Range
Dim lngLetzteZeile As Long

'Letzte Zeile finden
With Tabelle2
    lngLetzteZeile = .Range("H" & .Rows.Count).End(xlUp).Row
'Beachten Sie, dass bei diesem Ansatz alle ausgeblendeten Zeilen übersprungen werden.
End With

Set rngMeinBereich = Tabelle2.Range("E3:H" & lngLetzteZeile)

'welcher Bereich wird überhaupt verarbeitet?
Debug.Print rngMeinBereich.Address

For Each rngZelle In rngMeinBereich

'welche Zelle wird gerade verarbeitet?
Debug.Print rngZelle.Address
Debug.Print rngZelle.Value
Debug.Print rngZelle.Style

    If rngZelle.Value > 200000 Then
    MsgBox "Wert in Zelle " & rngZelle.Address & " gefunden.", vbExclamation, "Treffer!"
    Exit For
    End If

Next rngZelle

End Sub

Die Eigenschaften Address, Value und Style werden im Direktbereich ausgegeben.

Eigenschaften werden im Direktbereich angezeigt

Um die Ausgabe etwas verständlicher zu machen, können Sie auch Beschreibungen hinzufügen. Zum Beispiel:

Debug.Print "Aktuelle Zelle:"
Debug.Print rngZelle.Address
Debug.Print "Wert der Zelle:"
Debug.Print rngZelle.Value
Debug.Print "Formatvorlage der Zelle:"
Debug.Print rngZelle.Style

In diesem Fall sieht das gesamte Makro so aus:

Sub BeispielDebug()

Dim rngMeinBereich As Range
Dim rngZelle As Range
Dim lngLetzteZeile As Long

'Letzte Zeile finden
With Tabelle2
    lngLetzteZeile = .Range("H" & .Rows.Count).End(xlUp).Row
'Beachten Sie, dass bei diesem Ansatz alle ausgeblendeten Zeilen übersprungen werden.
End With

Set rngMeinBereich = Tabelle2.Range("E3:H" & lngLetzteZeile)

'welcher Bereich wird überhaupt verarbeitet?
Debug.Print "Bereich:"
Debug.Print rngMeinBereich.Address

For Each rngZelle In rngMeinBereich

'welche Zelle wird gerade verarbeitet?
Debug.Print "Aktuelle Zelle:"
Debug.Print rngZelle.Address
Debug.Print "Wert der Zelle:"
Debug.Print rngZelle.Value
Debug.Print "Formatvorlage der Zelle:"
Debug.Print rngZelle.Style

    If rngZelle.Value > 200000 Then
    MsgBox "Wert in Zelle " & rngZelle.Address & " gefunden.", vbExclamation, "Treffer!"
    Exit For
    End If

Next rngZelle

End Sub

Der Direktbereich sieht dann so aus:

Direktbereich mit Beschreibungen

Nun können Sie Ihre Schleifen problemlos debuggen. Ich hoffe, dass Ihnen dieser Beitrag weitergeholfen hat.

Die Beispiel Excel Datei mit dem sofort einsetzbaren Makro und 111+ andere Makros, die Ihr Leben leichter machen, finden Sie hier.

Beeindrucke deinen Chef mit coolen Excel Tricks!

  • Lasse dich von deinen Kollegen nicht abhängen!
  • Spare Zeit und nutze diese für angenehmere Dinge
  • Steigere deine Produktivität und Effizienz
  • Es ist leicht - In meinem Newsletter gebe ich Schritt für Schritt Anleitungen die jeder versteht
  • Bei der Anmeldung zu meinem Newsletter erhälst du das Buch „Excel Tricks die deinen Chef beeindrucken“ als Willkommensgeschenk.
20 Excel Tricks

Jetzt anfordern!

* Pflichtfeld
 
Kein SPAM. 100% sicher.

0 Kommentare

Hinterlasse ein Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.