TOP

VBA-Lektion 8.2. Schleifen (Loops)

Um zu üben, was wir gerade gelernt haben, werden wir den Prozess der Erstellung eines Makros zum Malen eines 10x10-Schachbretts (Rot und Schwarz) beginnend mit der aktuell aktiven Zelle durchlaufen.


Schauen wir uns die Ausgabe der Schleife an, die wir erhalten möchten:

Als nächstes besteht der erste Schritt der Übung darin, eine leere Prozedur zu erstellen:

Sub loops_exercise()

    Const NB_CELLS As Integer = 10 'Die Anzahl der Zellen, die wir malen möchten

    '...
   
End Sub

Beginnen wir mit dem Hinzufügen einer FOR-Schleife, um Spalte A zu schwärzen (die NB_CELLS-Konstante ist 10).

Wir sollten das folgende Ergebnis erhalten:

Werfen wir einen Blick auf den Code:

Sub loops_exercise()

    Const NB_CELLS As Integer = 10 'Die Anzahl der Zellen, die wir malen möchten

    For r = 1 To NB_CELLS 'r => Zeilennummer
   
        Cells(r, 1).Interior.Color = RGB(0, 0, 0) 'Schwarz

    Next
   
End Sub

Im nächsten Schritt wird jede nachfolgende Zelle mithilfe der IF-Anweisung rot gefärbt (basierend darauf, ob die Zeilennummer gerade oder ungerade ist). Sehen untere:

Der Code zur Lösung dieser Teilaufgabe lautet wie folgt:

Sub loops_exercise()

    Const NB_CELLS As Integer = 10 'Die Anzahl der Zellen, die wir malen möchten

    For r = 1 To NB_CELLS 'r => Zeilennummer
   
       If r Mod 2 = 0 Then 'Mod => ist der Rest der Division
           Cells(r, 1).Interior.Color = RGB(200, 0, 0) 'Rot
       Else
           Cells(r, 1).Interior.Color = RGB(0, 0, 0) 'Schwarz
       End If

    Next
   
End Sub

Die Bedingung IF r Mod 2 = 0 bedeutet: Wenn der Rest der Division von r durch 2 0 ist ...

Nur die Zeilennummer, die gerade ist, hat einen Rest von 0, wenn sie durch 2 geteilt wird:

So erstellen Sie eine weitere Schleife, die die Schleife ausführt, die wir bereits für 10 Spalten geschrieben haben. Sehen untere:

Der Code zur Lösung dieser Teilaufgabe lautet wie folgt:

Sub loops_exercise()

    Const NB_CELLS As Integer = 10 '10x10 Schachbrett mit Zellen

    For r = 1 To NB_CELLS 'r => Zeilennummer
   
        For c = 1 To NB_CELLS 'c => Spaltennummer
       
           If r Mod 2 = 0 Then
               Cells(r, c).Interior.Color = RGB(200, 0, 0) 'Rot
           Else
               Cells(r, c).Interior.Color = RGB(0, 0, 0) 'Schwarz
           End If
           
        Next
    Next
   
End Sub

Nun wird der zweite Zyklus in den ersten eingefügt.

Um das folgende Ergebnis zu erzielen...

Ersetzen:

If r Mod 2 = 0 Then

An:

If (r + c) Mod 2 = 0 Then

Jetzt muss nur noch der Code so geändert werden, dass das Schachbrett ab der ausgewählten Zelle (nicht A1) erstellt wird. Siehe unten:

Dazu schreiben wir den folgenden Code:

Sub loops_exercise()

   Const NB_CELLS As Integer = 10 '10x10 Schachbrett mit Zellen
   Dim offset_row As Integer, offset_col As Integer '=> 2 Variablen hinzufügen
   
   'Offset (Zeilen) ab der ersten Zelle = Zeilennummer der aktuell aktiven Zelle - 1
   offset_row = ActiveCell.Row - 1
   'Offset (Spalten) ab der ersten Zelle = Spaltennummer der aktuell aktiven Zelle - 1
   offset_col = ActiveCell.Column - 1
   
   For r = 1 To NB_CELLS 'Zeilennummer
   
        For c = 1 To NB_CELLS 'Spaltennummer
       
            If (r + c) Mod 2 = 0 Then
            'Zelle(Zeilennummer + zusätzlicher Zeilenversatz, Spaltennummer +
            'zusätzliche Verschiebung der Lautsprecher)
                Cells(r + offset_row, c + offset_col).Interior.Color = RGB(200, 0, 0) 'Rot
            Else
                Cells(r + offset_row, c + offset_col).Interior.Color = RGB(0, 0, 0) 'Schwarz
            End If
           
        Next
   Next
   
End Sub