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.
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.
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.
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:
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.
Hinterlasse einen Kommentar
An der Diskussion beteiligen?Hinterlasse uns deinen Kommentar!