VBA in Excel/ Schleifen
Siehe auch: VBA in Excel/_Beispiele für Schleifen
For-Schleifen
BearbeitenEinfache For-Schleifen
BearbeitenEinfache For-Schleife zum Eintragen von Zahlen in eine Tabelle
BearbeitenIn die erste Spalte des aktiven Arbeitsblattes werden die Ziffern 1 bis 100 eingetragen:
Sub EintragenZahlen()
Dim intRow As Integer
For intRow = 1 To 100
Cells(intRow, 1) = intRow
Next intRow
End Sub
Einfache For-Schleife zum Eintragen von Wochentagen in eine Tabelle
BearbeitenAls einzige Veränderung zum obigen wird in diesem Beispiel über die Zählvariable der Wochentag, beginnend beim Sonntag, eingetragen.
Sub EintragenWochenTage()
Dim intTag as Integer
For intTag = 2 To 8
Cells(intTag, 1) = Format(intTag, "dddd")
Next intTag
End Sub
Einfache For-Schleife mit variablem Ende
BearbeitenFor-Schleife zum Eintragen einer zu ermittelnden Anzahl von Tagen
BearbeitenStart oder Ende einer Schleife liegen nicht immer fest und müssen möglicherweise bestimmt werden. Hier wird über die DateSerial-Funktion aus VBA der letzte Tag des aktuellen Monats bestimmt, um, beginnend bei Zelle E1, die Datumseintragungen des aktuellen Monats vorzunehmen.
Sub EintragenMonatTage()
Dim intTag As Integer
For intTag = 1 To Day(DateSerial(Year(Date), Month(Date) + 1, 0))
Cells(intTag, 5) = DateSerial(Year(Date), Month(Date), intTag)
Next intTag
End Sub
Verschachtelte For-Schleife
BearbeitenVerschachtelte For-Schleife zum Eintragen des aktuellen Kalenderjahres
BearbeitenDie Variablen für Jahr, Monat und Tag werden dimensioniert. Das aktuelle Jahr wird an die Jahresvariable übergeben. Die äussere Schleife führt über die 12 Monate, wobei in Zeile 1 der jeweilige Monatsname eingetragen wird. Die innere Schleife führt über die Anzahl der Tage des jeweiligen Monats und trägt das jeweilige Datum in die Zellen ein. Zu beachten ist, dass Zeilen- und Schleifenzähler unterschiedliche Werte haben können. Im Beispiel werden die Tage erst ab Zeile 2 eingetragen, also wird der Zeilen- gegenüber dem Schleifenzähler um 1 hochgesetzt.
Sub EintragenJahr()
Dim intYear As Integer, intMonat As Integer, intTag As Integer
intYear = Year(Date)
For intMonat = 1 To 12
Cells(1, intMonat) = Format(DateSerial(1, intMonat, 1), "mmmm")
For intTag = 1 To Day(DateSerial(intYear, intMonat + 1, 0))
Cells(intTag + 1, intMonat) = Format(DateSerial(Year(Date), intMonat, intTag))
Next intTag
Next intMonat
End Sub
Do-Schleifen
BearbeitenDo-Schleifen
BearbeitenDo-Schleifen, ähnlich wie While-Schleifen, wiederholen sich beliebig oft. Die Schleife wird erst durch die Anweisung "Exit Do" beendet, die innerhalb der Do-Schleife z.B.(?) in einer If-Abfrage umgesetzt wird.
In dieser Do-Schleife wird eine Zufallszahl ermittelt. Wenn diese dem Index des aktuellen Monats entspricht, erfolgt eine Ausgabe in einer MsgBox.
Sub Zufall()
Dim intCounter As Integer, intMonth As Integer
Randomize
Do
intCounter = intCounter + 1
intMonth = Int((12 * Rnd) + 1)
If intMonth = Month(Date) Then
MsgBox "Der aktuelle Monat " & _
Format(DateSerial(1, intMonth, 1), "mmmm") & _
" wurde im " & intCounter & _
". Versuch gefunden!"
Exit Do
End If
Loop
End Sub
Do-While-Schleifen
BearbeitenIn dieser Do-While-Schleife, startend in Zelle A1, werden die Zellen abwärts geprüft, ob ein Suchbegriff darin vorkommt. Ist die Fundstelle erreicht, wird die Schleife verlassen und eine Meldung ausgegeben
Sub SuchenBegriff()
Dim intRow As Integer
intRow = 1
Do While Left(Cells(intRow, 1), 7) <> "Zeile 7"
intRow = intRow + 1
Loop
MsgBox "Suchbegriff wurde in Zelle " & _
Cells(intRow, 1).Address & " gefunden!"
End Sub
Do-Until-Schleifen
BearbeitenIn dieser Do-Until-Schleife wird eine Zählvariable hochgezählt, bis der aktuelle Monat erreicht wird. Die Ausgabe erfolgt in einer Messagebox.
Sub PruefenWerte()
Dim intCounter As Integer
intCounter = 1
Do Until Month(DateSerial(Year(Date), intCounter, 1)) = _
Month(Date)
intCounter = intCounter + 1
Loop
MsgBox "Der aktuelle Monat ist:" & vbLf & _
Format(DateSerial(Year(Date), intCounter, 1), "mmmm")
End Sub
For-Each-Schleifen
BearbeitenEs wird eine Objektvariable für ein Arbeitsblatt angelegt und alle Arbeitsblätter einer Arbeitsmappe werden durchgezählt. Das Ergebnis wird in einer MsgBox ausgegeben.
Sub ZaehlenBlaetter()
Dim wks As Worksheet
Dim intCounter As Integer
For Each wks In Worksheets
intCounter = intCounter + 1
Next wks
If intCounter = 1 Then
MsgBox "Die aktive Arbeitsmappe hat 1 Arbeitsblatt!"
Else
MsgBox "Die aktive Arbeitsmappe hat " & _
intCounter & " Arbeitsblätter!"
End If
End Sub
While-Schleifen
BearbeitenBeispiel ohne "echte" Funktion, dient lediglich zur Veranschaulichung der While-Schleife. Die Schleife zählt so lange hoch (nach jedem Schritt wird das neue Ergebnis ausgegeben) bis die While-Bed. nicht mehr erfüllt ist. Im Gegensatz zur Do-While-Schleife muss die While-Schleife mit "Wend" (steht für "While-Schleifen Ende") beendet werden! (Siehe auch Unterschied While-Wend / Do-While-Loop)
Sub WhileBsp()
Dim i As Integer
i = 0
While i <> 3
MsgBox "While-Schleife: " & i
i = i + 1
Wend
End Sub