Frage von PatrickakaDora, 51

Wie kann man zwei Variablen in einer For-Schleife hochzählen lassen (in VBA ) ?

Ich möchte mithilfe von VBA eine bedingte Formatierung (Hintergrundfarbe) von einzelnen Zellen(jede zweite im Bereich von 2 - 34) innerhalb einer Spalte durchführen. Ist der Wert der entsprechenden Spalte gleich des Wertes in der Zelle links daneben (B), soll die Zelle einen grünen Hintergrund bekommen, ansonsten gelb. Die Spaltenbezeichnungen wollte ich mithilfe einer For-Schleife hochzählen lassen. Wie kann ich dies möglichst einfach realisieren?

Ich bin gerade dabei VBA zu erlernen und dementsprechend noch unerfahren.

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Oubyi, Community-Experte für Excel, 19

Du brauchst keine zweite Variable und daher auch keine zweite For-Schleife.
Einfach:

If Range("c"& i ).Value=Range("b"& i ).Value

und das

For n= ...
...
Next n

weglassen.

Kommentar von Oubyi ,

Danke fürs

Antwort
von daCypher, 31

Du musst den Teil hinter dem Else am besten in eine neue Zeile packen und dann mit End If abschließen. Die Schleife an sich sollte aber funktionieren.

 Also so:

If Range("c" & i).Value = Range("b" & n).Value Then
    Range("c" & i).Interior.Color = vbGreen
Else
    Range("c" & i).Interior.Color = vbYellow
End If

Ich denke aber, dass du nicht den Effekt haben willst, den deine Funktion macht. Du willst wahrscheinlich vergleichen, ob der Wert in Spalte B genauso ist, wie der Wert in Spalte C und dann halt die Zellen in Spalte C entweder Grün oder Gelb hinterlegen. Wenn das der Fall ist, brauchst du aber nur eine Schleife und nicht zwei ineinander geschachtelte Schleifen. Statt dem n kannst du dann zum Vergleich auch einfach das i nehmen.

So, wie du es machst, wird im ersten Durchlauf die 12 aus der Zelle C2 mit jedem Wert aus der Spalte B verglichen und die Farben werden immer wieder überschrieben. Der letzte Vergleich (C2 mit B34) bleibt dann stehen, wird also Gelb. Das passiert mit jeder Zelle in C. Die werden alle Gelb, weil halt der letzte Vergleich immer mit B34 ist)

Also das, was ich denke, was du vorhast, würde so gehen:

For i = 2 to 34 Step 2

    If Range("c" & i).Value = Range("b" & i).Value Then
        Range("c" & i).Interior.Color = vbGreen
    Else
        Range("c" & i).Interior.Color = vbYellow
    End If

Next i



Kommentar von daCypher ,

Alternativ kannst du dein Problem natürlich auch ohne VBA lösen, indem du einfach die Werte von der Spalte B mit C vergleichst. Z.B. in D2 die Formel =WENN(B2=C2;1;0) und dann nach 1 oder 0 filtern oder meinetwegen eine bedingte Formatierung für 1 oder 0 einstellen.

Expertenantwort
von Suboptimierer, Community-Experte für Excel, 25

Reicht nicht eine Schleife über alle Zeilen, in der geschaut wird, ob der Wert in Spalte B dem aus Spalte C entspricht?

Den Else-Zweig kannst du dir komplett schenken, wenn du die komplette Tabelle vor der Schleife gelb einfärbst.

Antwort
von offeltoffel, 29

So wie du es gemacht hast, funktioniert es schon. Du hast nur das "End If" vergessen ;)

Übersichtlicher ist es übrigens, wenn du jede For-Schleife entsprechend einrückst:

For i = 2 To 34 Step 2
For n = 2 To 34 Step 2
' deine Prozedur
Next n
Next i

Dann weißt du immer, wo du gerade arbeitest. In deinem Fall nicht so wichtig, aber später dann schon.

Außerdem ist die Zuweisung i = 2 und n = 2 vor Beginn der Schleifen nicht nötig, er initiiert diese Variablen automatisch mit dem Startwert der Iteration.

Antwort
von DataWraith, 25

x = x+1
y = y+1

next

Keine passende Antwort gefunden?

Fragen Sie die Community