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

Mein bisheriger Code - (programmieren, Microsoft Excel, VBA)

5 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

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.

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)

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




daCypher  24.11.2016, 11:24

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.

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.

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.

Woher ich das weiß:Berufserfahrung – Programmierer