HERBERS Excel-Forum - VBA-Basics

Thema: Schleifen

Inhaltsverzeichnis
  • 1 Einfache Schleife zum Eintragen von Zahlen in eine Tabelle
  • 2 Einfache Schleife zum Eintragen von Wochentagen in eine Tabelle
  • 3 Schleife zum Eintragen einer zu ermittelnden Anzahl von Tagen
  • 4 Verschachtelte Schleife zum Eintragen des aktuellen Kalenderjahres
  • 5 Do-Schleifen
  • 6 Do-While-Schleifen
  • 7 Do-Until-Schleifen
  • 8 For-Each-Schleifen
  • Einfache Schleife zum Eintragen von Zahlen in eine Tabelle

    In die erste Spalte des aktiven Arbeitsblattes werden die Ziffern 1 bis 100 eingetragen:

    
    Sub EintragenWochenTage()
       Dim intRow As Integer
       For intRow = 1 To 100
          Cells(intRow, 1) = intRow
       Next intRow
    End Sub
    

    Einfache Schleife zum Eintragen von Wochentagen in eine Tabelle

    Als 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 = 1 To 7
          Cells(intTag, 1) = Format(intTag, "dddd")
       Next intTag
    End Sub
    

    Schleife zum Eintragen einer zu ermittelnden Anzahl von Tagen

    Start 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 Schleife zum Eintragen des aktuellen Kalenderjahres

    Die 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) = DateSerial(Year(Date), intMonat, intTag)
          Next intTag
       Next intMonat
    End Sub
    

    Do-Schleifen

    In einer 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

    In einer 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

    In einer Do-Until-Schleife wird eine Zählvariable hochgezählt, bis der aktuelle Monat erreicht wird. In einer Messagebox wird dieser ausgegeben.

    
    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

    Es 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