Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: for schleife mit zwei variablen

for schleife mit zwei variablen
17.08.2017 14:18:34
Ahmet
Hallo zusammen,
ich bin gerade dabei eine Tabelle zu erstellen in der eine For schleife sinnvoll wäre.
Allerdings kriege ich diese nicht wirklich zum laufen:
Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
Range("P5:P14").Interior.ColorIndex = 15
Range("P5:P14").Value = "Urlaub"
Range("P5:P14").Locked = True
Range("P16:P25").Interior.ColorIndex = 15
Range("P16:P25").Value = "Urlaub"
Range("P16:P25").Locked = True
Range("P27:P36").Interior.ColorIndex = 15
Range("P27:P36").Value = "Urlaub"
Range("P27:P36").Locked = True
..... der Code würde hier ewig weiter laufen (inkls. else Anweisung)
Mein Vorschlag sieht so aus:

Private Sub CheckBox1_Click()
dim x as integer
dim y as integer
If CheckBox1.Value = True Then
For x = 5 to 577 step 11
for y = 14 to 586 step 11
Range(Cells(16,x), Cells(16,y)).Interior.ColorIndex = 15
Range(Cells(16,x), Cells(16,y)).Value = "Urlaub"
Range(Cells(16,x), Cells(16,y)).Locked = True
next y
next x
end if
End Sub
ist bei Excel solch eine Schleife überhaupt möglich? Bei c++ kriege ich so etwas hin - nicht aber bei excel
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: for schleife mit zwei variablen
17.08.2017 14:46:10
Werner
Hallo Ahmet,
so?
Private Sub CheckBox1_Click()
dim x as long
dim y as long
y = 14
If CheckBox1.Value = True Then
For x = 5 to 577 step 11
Range(Cells(x, 16), Cells(y, 16)).Interior.ColorIndex = 15
Range(Cells(x, 16), Cells(y, 16)).Value = "Urlaub"
Range(Cells(x, 16), Cells(y, 16)).Locked = True
y = y + 11
next x
end if End Sub
Bei der Cells Schreibweise ist der erste Wert in der Klammer die Zeile und der zweite wert die Spalte.
Gruß Werner
Anzeige
Eine verschachtelte Schleife ist aber unnötig...
17.08.2017 14:50:06
Michael
Ahmet,
...aus meiner Sicht. Wenn ich Dich richtig interpretiert habe, sollte Dir auch das reichen (mit nur einer Schleife, und einer Laufvariablen):
Private Sub CheckBox1_Click()
Dim i&
If CheckBox1.Value = True Then
For i = 5 To 577 Step 11
With Range("P" & i & ":" & "P" & i + 9)
.Interior.Color.Index = 15
.Value = "Urlaub"
.Locked = True
End With
Next i
End If
End Sub
LG
Michael
Anzeige
AW: for schleife mit zwei variablen
17.08.2017 15:15:54
Ahmet
Hi,
klasse Vorschläge von euch beiden. Simpel aber gut.
Bei Michael seinem Code kommt leider ein Fehler:
.Interior.Color.Index = 15 --> Objekt erforderlich
Werner sein Code funktioniert soweit. Nur wenn ich mein Else Part mit einfüge bekomme ich den Fehler "Else ohne If Block" obwohl dieser Code vorher funktionierte.
Probiert habe ich das auf einer leeren Mappe.
Private Sub CheckBox3_Click()
Dim x As Long
Dim y As Long
y = 14
If CheckBox1.Value = True Then
For x = 5 To 577 Step 11
Range(Cells(x, 16), Cells(y, 16)).Interior.ColorIndex = 15
Range(Cells(x, 16), Cells(y, 16)).Value = "Urlaub"
Range(Cells(x, 16), Cells(y, 16)).Locked = True
y = y + 11
Else
Range(Cells(x, 16), Cells(y, 16)).Interior.ColorIndex = 40
Range(Cells(x, 16), Cells(y, 16)).ClearContents
Range(Cells(x, 16), Cells(y, 16)).Locked = False
Next x
End If
End Sub

Anzeige
Bei mir ist nur der Punkt in Color.Index zuviel oT
17.08.2017 15:45:02
Michael
AW: for schleife mit zwei variablen
17.08.2017 16:09:48
Werner
Hallo Ahmet,
Next x muss vor Else
Private Sub CheckBox3_Click()
Dim x As Long
Dim y As Long
y = 14
If CheckBox1.Value = True Then
For x = 5 To 577 Step 11
Range(Cells(x, 16), Cells(y, 16)).Interior.ColorIndex = 15
Range(Cells(x, 16), Cells(y, 16)).Value = "Urlaub"
Range(Cells(x, 16), Cells(y, 16)).Locked = True
y = y + 11
Next x
Else
Range(Cells(x, 16), Cells(y, 16)).Interior.ColorIndex = 40
Range(Cells(x, 16), Cells(y, 16)).ClearContents
Range(Cells(x, 16), Cells(y, 16)).Locked = False
End IfEnd Sub
Gruß Werner
Anzeige
AW: for schleife mit zwei variablen
17.08.2017 15:35:59
Ahmet
Nachtrag: so hat es nun funktioniert:
Private Sub CheckBox1_Click()
Dim x As Long
Dim y As Long
y = 14
For x = 5 To 577 Step 11
If CheckBox1.Value = True Then
Range(Cells(x, 6), Cells(y, 6)).Interior.ColorIndex = 15
Range(Cells(x, 6), Cells(y, 6)).Value = "Urlaub"
Range(Cells(x, 6), Cells(y, 6)).Locked = True
Else
Range(Cells(x, 6), Cells(y, 6)).Interior.ColorIndex = 40
Range(Cells(x, 6), Cells(y, 6)).ClearContents
Range(Cells(x, 6), Cells(y, 6)).Locked = False
End If
y = y + 11
Next x
End Sub

vielen dank euch beiden
Anzeige
Bitte, aber...
17.08.2017 16:02:06
Michael
Ahmet,
...so wie Du es jetzt hast, prüfst Du bei jedem Schleifendurchlauf ob die CheckBox1 WAHR ist:
For x = 5 To 577 Step 11
If CheckBox1.Value = True Then
Aber das musst Du doch nur einmal prüfen. Und die doppelte Zählvariable ist aus meiner Sicht immer noch nicht erforderlich. Ich würde so tun...
Sub CheckBox1_Click()
Dim x&, c&, v$, l As Boolean
With CheckBox1
c = IIf(.Value = True, 15, 40)
v = IIf(.Value = True, "Urlaub", vbNullString)
l = IIf(.Value = True, True, False)
End With
For x = 5 To 577 Step 11
With Range(Cells(x, 6), Cells(x + 9, 6))
.Interior.ColorIndex = c
.Value = v
.Locked = l
End With
Next x
End Sub
LG
Michael
Anzeige
AW: Bitte, aber...
17.08.2017 16:18:22
Werner
Hallo Ahmet,
sehe gerade, dass du im Else Zweig ja ebenfalls eine Schleife brauchst.
Private Sub CheckBox3_Click()
Dim x As Long
Dim y As Long
y = 14
If CheckBox1.Value = True Then
For x = 5 To 577 Step 11
Range(Cells(x, 16), Cells(y, 16)).Interior.ColorIndex = 15
Range(Cells(x, 16), Cells(y, 16)).Value = "Urlaub"
Range(Cells(x, 16), Cells(y, 16)).Locked = True
y = y + 11
Next x
Else
Range(Cells(x, 16), Cells(y, 16)).Interior.ColorIndex = 40
Range(Cells(x, 16), Cells(y, 16)).ClearContents
Range(Cells(x, 16), Cells(y, 16)).Locked = False
End IfEnd Sub
Wobei der Code von Michael natürlich eleganter ist und auf die zweite Zählvariable verzichtet.
Gruß Werner
Anzeige
Sry Michael, im falschen Zweig. o.w.T.
17.08.2017 16:19:14
Werner
Kein Problem! LG und owT
17.08.2017 16:25:18
Michael
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

For Schleife mit zwei Variablen in VBA optimieren


Schritt-für-Schritt-Anleitung

Um eine For Schleife mit 2 Variablen in VBA zu implementieren, folge diesen Schritten:

  1. Öffne deinen Excel-Arbeitsblatt und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu, indem du im Menü auf Einfügen > Modul klickst.
  3. Kopiere den folgenden Code in das Modul:
Private Sub CheckBox1_Click()
    Dim x As Long
    Dim y As Long
    y = 14
    If CheckBox1.Value = True Then
        For x = 5 To 577 Step 11
            Range(Cells(x, 16), Cells(y, 16)).Interior.ColorIndex = 15
            Range(Cells(x, 16), Cells(y, 16)).Value = "Urlaub"
            Range(Cells(x, 16), Cells(y, 16)).Locked = True
            y = y + 11
        Next x
    Else
        For x = 5 To 577 Step 11
            Range(Cells(x, 16), Cells(y, 16)).Interior.ColorIndex = 40
            Range(Cells(x, 16), Cells(y, 16)).ClearContents
            Range(Cells(x, 16), Cells(y, 16)).Locked = False
            y = y + 11
        Next x
    End If
End Sub
  1. Schließe den VBA-Editor und teste die Funktionalität durch einen Klick auf die CheckBox.

Häufige Fehler und Lösungen

  • Fehler: "Else ohne If Block"

    • Stelle sicher, dass das Next-Statement vor dem Else-Teil steht. Dies ist wichtig, damit die Schleife korrekt funktioniert.
  • Fehler: "Objekt erforderlich"

    • Achte darauf, dass der Befehl .Interior.Color.Index korrekt geschrieben ist. Der Punkt vor Interior sollte entfernt werden.

Alternative Methoden

Wenn du die For Schleife mit 2 Variablen vermeidest, kannst du auch eine einfache Schleife mit einer Laufvariablen verwenden, um denselben Effekt zu erzielen. Hier ist ein Beispiel:

Private Sub CheckBox1_Click()
    Dim i As Long
    If CheckBox1.Value = True Then
        For i = 5 To 577 Step 11
            With Range("P" & i & ":P" & i + 9)
                .Interior.ColorIndex = 15
                .Value = "Urlaub"
                .Locked = True
            End With
        Next i
    End If
End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele zur Verwendung der For Schleife mit 2 Variablen:

  1. Farben ändern:

    Range(Cells(x, 16), Cells(y, 16)).Interior.ColorIndex = 15

    Dieser Befehl ändert die Hintergrundfarbe der Zellen.

  2. Werte einfügen:

    Range(Cells(x, 16), Cells(y, 16)).Value = "Urlaub"

    Dieser Befehl fügt den Text "Urlaub" in die Zellen ein.

  3. Zellen sperren:

    Range(Cells(x, 16), Cells(y, 16)).Locked = True

    Mit diesem Befehl werden die Zellen gesperrt, sodass keine Eingaben möglich sind.


Tipps für Profis

  • Überlege, die Werte von y vor der Schleife zu initialisieren, um die Lesbarkeit zu verbessern.
  • Verwende die With-Anweisung, um den Code zu optimieren und wiederholte Schreibweisen zu vermeiden.
  • Nutze die IIf-Funktion, um den Code noch schlanker zu gestalten.

FAQ: Häufige Fragen

1. Kann ich die Schleife auch rückwärts durchführen? Ja, du kannst die Schleife mit Step -1 verwenden, um rückwärts zu iterieren. Zum Beispiel:

For x = 10 To 1 Step -1

2. Ist es möglich, mehrere Schleifen zu verschachteln? Ja, du kannst mehrere Schleifen innerhalb einer Schleife verwenden. Achte jedoch darauf, dass dies den Code komplizierter machen kann.

3. Welche Excel-Version wird benötigt? Die gezeigten Beispiele funktionieren in Excel 2007 und höheren Versionen. Achte darauf, dass die VBA-Umgebung in deiner Excel-Version verfügbar ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige