HERBERS Excel-Forum - VBA-Basics

Thema: Beispiele für Schleifen

Inhaltsverzeichnis
  • 1 Über Schleifen
  • 2 Schleifentypen-Beispiele
  • 3 Objektbezogene Beispiele
  • Über Schleifen

    Schleifen sind zentraler Bestandteil jeder Programmiersprache. Anhand von Schleifen ist es möglich, Programmanweisungen mehrmals hintereinander zu wiederholen. Beispiel einer Programmierung ohne Schleifeneinsatz:

    
    Cells(1, 1).Value = "ZEILE 1"
    Cells(2, 1).Value = "ZEILE 2"
    Cells(3, 1).Value = "ZEILE 3"
    Cells(4, 1).Value = "ZEILE 4"
    Cells(5, 1).Value = "ZEILE 5"
    Cells(6, 1).Value = "ZEILE 6"
    

    Beispiel der gleichen Programmierung mit Schleifeneinsatz:

    
    For iCounter = 1 To 6
       Cells(iCounter, 1).Value = "Zeile " & iCounter
    Next iCounter
    

    Schleifentypen-Beispiele

    Jeder Schleifentyp kann weitere Bedingungsprüfungen enthalten. Bei Zählschleifen kann die Schrittgröße festgelegt werden; der Default-Wert ist 1.

    • Zählschleifen

      • For...To...Next-Schleife
        • Prozedur: ForNextCounter
        • Art: Sub
        • Modul: Standardmodul
        • Zweck: Zähler hochzählen und Einzelwerte berechnen
        • Ablaufbeschreibung:
          • Variablendeklaration
          • Schleifenbeginn
          • Wert berechnen und addieren
          • Schleifenende
          • Ergebnisausgabe
        • Code:
          
          Sub ForNextCounter()
             Dim dValue As Double
             Dim iCounter As Integer
             For iCounter = 1 To 100
                dValue = dValue + iCounter * 1.2
             Next iCounter
             MsgBox "Ergebnis: " & dValue
          End Sub
          
      • For...To...Next-Schleife mit Schrittgrößenangabe nach vorn
        • Prozedur: ForNextStepForward
        • Art: Sub
        • Modul: Standardmodul
        • Zweck: Zähler schrittweise hochzählen
        • Ablaufbeschreibung:
          • Variablendeklaration
          • Schleifenbeginn
          • Wert ausgeben
          • Schleifenende
        • Code:
          
          Sub ForNextStepForward()
             Dim iCounter As Integer
             For iCounter = 1 To 10 Step 2
                MsgBox iCounter
             Next iCounter
          End Sub
          
      • For...To...Next-Schleife mit Schrittgrößenangabe zurück
        • Prozedur: ForNextStepBack
        • Art: Sub
        • Modul: Standardmodul
        • Zweck: Zähler schrittweise hochzählen
        • Ablaufbeschreibung:
          • Variablendeklaration
          • Schleifenbeginn
          • Wert ausgeben
          • Schleifenende
        • Code:
          
          Sub ForNextStepBack()
             Dim iCounter As Integer
             For iCounter = 10 To 1 Step -2
                MsgBox iCounter
             Next iCounter
          End Sub
          
      • While ... Wend-Schleife
        • Prozedur: WhileWend
        • Art: Sub
        • Modul: Standardmodul
        • Zweck: Zellen durchlaufen und Einzelwerte berechnen
        • Ablaufbeschreibung:
          • Variablendeklaration
          • Startwert setzen
          • Schleifenbeginn
          • Wert berechnen und addieren
          • Zeilenzähler hochzählen
          • Schleifenende
          • Wert ausgeben
        • Code:
          
          Sub WhileWend()
             Dim iRow As Integer
             Dim dValue As Double
             iRow = 1
             While Not IsEmpty(Cells(iRow, 1))
                dValue = dValue + Cells(iRow, 1).Value * 1.2
                iRow = iRow + 1
             Wend
             MsgBox "Ergebnis: " & dValue
          End Sub
          
          
      • Do ... Loop-Schleife
        • Prozedur: DoLoop
        • Art: Sub
        • Modul: Standardmodul
        • Zweck: Zellen durchlaufen und Einzelwerte berechnen
        • Ablaufbeschreibung:
          • Variablendeklaration
          • Startwert setzen
          • Schleifenbeginn
          • Wert berechnen und addieren
          • Bedingung prüfen
          • Zeilenzähler hochzählen
          • Schleifenende
          • Wert ausgeben
        • Code:
          
          Sub DoLoop()
             Dim iRow As Integer
             Dim dValue As Double
             iRow = 1
             Do
                dValue = dValue + Cells(iRow, 1).Value * 1.2
                If IsEmpty(Cells(iRow + 1, 1)) Then Exit Do
                iRow = iRow + 1
             Loop
             MsgBox "Ergebnis: " & dValue
          End Sub
          
    • Vorangestellte Bedingungsprüfung

      • Do ... While-Schleife
        • Prozedur: DoWhile
        • Art: Sub
        • Modul: Standardmodul
        • Zweck: Zellen durchlaufen und Einzelwerte berechnen
        • Ablaufbeschreibung:
          • Variablendeklaration
          • Startwert setzen
          • Schleifenbeginn mit Bedingung
          • Wert berechnen und addieren
          • Zeilenzähler hochzählen
          • Schleifenende
          • Wert ausgeben
        • Code:
          
          Sub DoWhile()
             Dim iRow As Integer
             Dim dValue As Double
             iRow = 1
             Do While Not IsEmpty(Cells(iRow, 1))
                dValue = dValue + Cells(iRow, 1).Value * 1.2
                iRow = iRow + 1
             Loop
             MsgBox "Ergebnis: " & dValue
          End Sub
          
          
      • Do ... Until-Schleife
        • Prozedur: DoUntil
        • Art: Sub
        • Modul: Standardmodul
        • Zweck: Zellen durchlaufen und Einzelwerte berechnen
        • Ablaufbeschreibung:
          • Variablendeklaration
          • Startwert setzen
          • Schleifenbeginn mit Bedingung
          • Wert berechnen und addieren
          • Zeilenzähler hochzählen
          • Schleifenende
          • Wert ausgeben
        • Code:
          
          Sub DoUntil()
             Dim iRow As Integer
             Dim dValue As Double
             iRow = 1
             Do Until IsEmpty(Cells(iRow, 1))
                dValue = dValue + Cells(iRow, 1).Value * 1.2
                iRow = iRow + 1
             Loop
             MsgBox "Ergebnis: " & dValue
          End Sub
          
          
    • Nachgestellte Bedingungsprüfung

      • Do ... Until-Schleife
        • Prozedur: DoUntil
        • Art: Sub
        • Modul: Standardmodul
        • Zweck: Zellen durchlaufen und Einzelwerte berechnen
        • Ablaufbeschreibung:
          • Variablendeklaration
          • Startwert setzen
          • Schleifenbeginn
          • Wert berechnen und addieren
          • Zeilenzähler hochzählen
          • Schleifenende mit Bedingung
          • Wert ausgeben
        • Code:
          
          Sub DoLoopWhile()
             Dim iRow As Integer
             Dim dValue As Double
             iRow = 1
             Do
                dValue = dValue + Cells(iRow, 1).Value * 1.2
                iRow = iRow + 1
             Loop While Not IsEmpty(Cells(iRow - 1, 1))
             MsgBox "Ergebnis: " & dValue
          End Sub
          
      • Weitere Schleifen mit nachgestellter Bedingungsprüfung
        • Do ... Loop ... Until-Schleife
          • Prozedur: DoLoopUntil
          • Art: Sub
          • Modul: Standardmodul
          • Zweck: Zellen durchlaufen und Einzelwerte berechnen
          • Ablaufbeschreibung:
            • Variablendeklaration
            • Startwert setzen
            • Schleifenbeginn
            • Wert berechnen und addieren
            • Zeilenzähler hochzählen
            • Schleifenende mit Bedingung
            • Wert ausgeben
          • Code:
            
            Sub DoLoopUntil()
               Dim iRow As Integer
               Dim dValue As Double
               iRow = 1
               Do
                  dValue = dValue + Cells(iRow, 1).Value * 1.2
                  iRow = iRow + 1
               Loop Until IsEmpty(Cells(iRow, 1))
               MsgBox "Ergebnis: " & dValue
            End Sub
            
            

      Objektbezogene Beispiele

      • Einsatz bei Arbeitsmappen- und Tabellenobjekte

        • Ausgabe der Arbeitsblattnamen der aktiven Arbeitsmappe
          • Prozedur: EachWks
          • Art: Sub
          • Modul: Standardmodul
          • Zweck: Arbeitsblattnamen der aktiven Arbeitsmappe ausgeben
          • Ablaufbeschreibung:
            • Variablendeklaration
            • Schleifenbeginn
            • Ausgabe der Namen
            • Schleifenende
          • Code:
            
            Sub EachWks()
               Dim wks As Worksheet
               For Each wks In Worksheets
                  MsgBox wks.Name
               Next wks
            End Sub
            
        • Ausgabe der Arbeitsblattnamen alle geöffneten Arbeitsmappen
          • Prozedur: EachWkbWks
          • Art: Sub
          • Modul: Standardmodul
          • Zweck: Arbeitsblattnamen aller geöffneten Arbeitsmappe ausgeben
          • Ablaufbeschreibung:
            • Variablendeklaration
            • Schleifenbeginn Arbeitsmappen
            • Schleifenbeginn Arbeitsblätter
            • Ausgabe der Namen
            • Schleifenende Arbeitblätter
            • Schleifenende Arbeitsmappen
          • Code:
            
            Sub EachWkbWks()
               Dim wkb As Workbook
               Dim wks As Worksheet
               For Each wkb In Workbooks
                  For Each wks In wkb.Worksheets
                     MsgBox wkb.Name & vbLf & "   -" & wks.Name
                  Next wks
               Next wkb
            End Sub
            
        • Ausgabe der integrierten Dokumenteneigenschaften der aktiven Arbeitsmappe
          • Prozedur: EachWkbWks
          • Art: Sub
          • Modul: Standardmodul
          • Zweck: Integrierte Dokumenteneigenschaften der aktiven Arbeitsmappe ausgeben
          • Ablaufbeschreibung:
            • Variablendeklaration
            • Fehlerroutine
            • Schleifenbeginn
            • Ausgabe der Namen
            • Schleifenende
            • Ende der Fehlerroutine
          • Code:
            
            Sub EachDPWkb()
               Dim oDP As DocumentProperty
               On Error Resume Next
               For Each oDP In ThisWorkbook.BuiltinDocumentProperties
                  MsgBox oDP.Name & ": " & oDP.Value
               Next oDP
               On Error GoTo 0
            End Sub
            
        • Ausgabe der Formatvorlagen der aktiven Arbeitsmappe
          • Prozedur: EachWkbWks
          • Art: Sub
          • Modul: Standardmodul
          • Zweck: Formatvorlagen der aktiven Arbeitsmappe ausgeben
          • Ablaufbeschreibung:
            • Variablendeklaration
            • Schleifenbeginn
            • Wert ausgeben
            • Schleifenende
          • Code:
            
            Sub EachStylesWkb()
               Dim oStyle As Style
               For Each oStyle In wkb.Styles
                  MsgBox oStyle.Name
               Next oStyle
            End Sub
            
        • Ausgabe der einzelnen Zelladressen eines vorgegebenen Bereiches
          • Prozedur: EachWkbWks
          • Art: Sub
          • Modul: Standardmodul
          • Zweck: Zelladressen eines vorgegebenen Bereiches ausgeben
          • Ablaufbeschreibung:
            • Variablendeklaration
            • Schleifenbeginn
            • Wert ausgeben
            • Schleifenende
          • Code:
            
            Sub EachCellWks()
               Dim rng As Range
               For Each rng In Range("A1:B2")
                  MsgBox rng.Address(rowabsolute:=False, columnabsolute:=False)
               Next rng
            End Sub
            
      • Einsatz bei tabellenintegrierten Steuerelement-Objekten

        • Prüfung, welches Optionsfeld in einer vorgegebenen Gruppe von Optionsfeldgruppen aktiviert ist
          • Prozedur: EachWks
          • Art: Sub
          • Modul: Klassenmodul der Tabelle
          • Zweck: Ausgabe des Namens des aktivierten Optionsfelds einer vorgegenen Optionsfeldgruppe
          • Ablaufbeschreibung:
            • Variablendeklaration
            • Schleife über alle Steuerelemente der Tabelle
            • Prüfung des Typnamens des Steuerelements
            • Wenn es sich um ein Optionsfeld handelt...
            • Übergabe an eine Objektvariable
            • Wenn das Optionsfeld aktiviert ist und es sich um ein Steuerelement von der Gruppe GroupB handelt...
            • Ausgabe des Namens des Steuerelements
            • Schleifenende
          • Code:
            
            Sub IfSelected()
               Dim oOle As OLEObject
               Dim oOpt As msforms.OptionButton
               For Each oOle In OLEObjects
                  If TypeName(oOle.Object) = "OptionButton" Then
                     Set oOpt = oOle.Object
                     If oOpt And oOpt.GroupName = "GroupB" Then
                        MsgBox "In GroupB ist " & oOpt.Caption & " aktiviert"
                     End If
                  End If
               Next oOle
            End Sub
            
            
      • Einsatz bei Userform-Steuerelement-Objekten

        • Prüfung, welche CheckBox-Elemente einer UserForm aktiviert sind
          • Prozedur: cmdRead_Click
          • Art: Sub
          • Modul: Klassenmodul der UserForm
          • Zweck: Ausgabe des Namenn aktivierter CheckBox-Elemente einer UserForm
          • Ablaufbeschreibung:
            • Variablendeklaration
            • Schleife über alle Steuerelemente der UserForm
            • Wenn es sich um eine CheckBox handelt...
            • Wenn die CheckBox aktiviert ist...
            • Einlesen des CheckBox-Namens in eine String-Variable
            • Schleifenende
            • Wenn keine aktivierte CheckBoxes gefunden wurden...
            • Negativmeldung
            • Sonst...
            • Ausgabe des oder der Namen der aktivierten CheckBoxes
          • Code:
            
            Private Sub cmdRead_Click()
               Dim oCntr As msforms.Control
               Dim sMsg As String
               For Each oCntr In Controls
                  If TypeName(oCntr) = "CheckBox" Then
                     If oCntr Then
                        sMsg = sMsg & "   " & oCntr.Name & vbLf
                     End If
                  End If
               Next oCntr
               If sMsg = "" Then
                  MsgBox "Es wurde keine CheckBox aktiviert!"
               Else
                  MsgBox "Aktivierte CheckBoxes:" & vbLf & sMsg
               End If
            End Sub
            
            
        • Bedingtes Einlesen von ListBox-Elementen in eine zweite ListBox
          • Prozedur: cmdAction_Click
          • Art: Sub
          • Modul: Klassenmodul der UserForm
          • Zweck: Ausgabe des Namenn aktivierter CheckBox-Elemente einer UserForm
          • Ablaufbeschreibung:
            • Variablendeklaration
            • Schleife über alle Listelemente des ersten Listenfelds
            • Wenn das Listenelement den Bedingungen entspricht...
            • Übergabe an das zweite Listenfeld
            • Schleifenende
          • Code:
            
            Private Sub cmdAction_Click()
               Dim iCounter As Integer
               For iCounter = 0 To lstAll.ListCount - 1
                  If CDate(lstAll.List(iCounter)) >= CDate(txtStart) And _
                     CDate(lstAll.List(iCounter)) <= CDate(txtEnd) Then
                     lstFilter.AddItem lstAll.List(iCounter)
                  End If
               Next iCounter
            End Sub