Frage von frhi2015, 87

Excel VBA - Range durch eine Schleife füllen?

Hallo. Ich möchte mehrere Zellen aktivieren. In einer Zeile sind es zusammenhängende Zellen zwischen zwei Spalten. Die Spalten kann ich definieren. Die Anzahl der Zeilen kann sich aber immer wieder ändern. Durch eine Abfrage kann ich die erste und letzte Zeile ermitteln. Zwischen diesen beiden Zeilen soll jede zweite Zeile markiert werden. Mache ich das in einem Beispiel und nehme dabei ein Macro auf, werden die einzelnen Zell-Ranges einfach mit Komma getrennt in einen Range geschrieben. Das Ziel ist, ein Conditional Formatting (Heat Map) auf alle Zellen, die aktiviert werden sollen, anzuwenden. Der Bereich startet immer in Zelle B9. Der nächste Bereich finge dann in B11, B13 usw. an. Ich würde ein Array nehmen, wenn ich vorher wüsste, wieviele Positionen ich brauche. Das können aber 6 sein oder aber auch 30. Gibt es eine Möglichkeit, ein Range so flexibel zu erstellen, die ganzen Zellbereiche zu markieren und dann auf alle das Conditional Formatting anzuwenden? Ich könnte die Zellbereich Zeile für Zeile markieren und die Formattierung einstellen. Aber die Formattierung soll ALLE Zellen miteinander vergleichen und nicht nur die, die in der selben Zeile stehen. Ich hoffe, ich kann mich verständlich ausdrücken. Vielen Dank für eure Hilfe.

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Suboptimierer, Community-Experte für Excel, 70

Anhand deines Beschreibungstexts sehe ich noch nicht, weshalb eine einfache For-Schleife nicht ausreicht.

For i=1 to 10000 step 2
  'Range(i  & ":" & i).FormatConditions.Add...
next

Kommentar von frhi2015 ,

Danke für die Antwort. Das Problem mit der Lösung ist, dass so die Zeilen einzeln formattiert werden. Es sollen aber alle Zeilen mit einer conditional formatting versehen werden. Ich möchte die Ampelfarben verwenden, um zu sehen, welche Zahl am höchsten, welche am kleinsten ist und welche dazwischen liegen. Und das nicht Zeile für Zeile, sondern auf alle Zeilen angewendet.

Kommentar von Suboptimierer ,

Du kannst mit Union Zellbereiche verbinden:

Dim i As Integer
Dim rFormat As Range

Set rFormat = Range("1:1")
For i = 3 To 100 Step 2
  Set rFormat = Union(rFormat, Range(i & ":" & i))
Next

rFormat.Select
Kommentar von frhi2015 ,

Vielen Dank. Probiere ich aus. Ich habe jetzt einen Umweg gewählt. Ein Macro schreibt jetzt alle Zellbereich auf ein Excel Sheet untereinander. Mithilfe einer Formel verbinde ich sie alle zu einem Range. Und diesen Range benutze ich dann in meinem Macro. Funktioniert auch. 

Trotzdem vielen Dank für deine Lösung. Ich probiere das auf jeden Fall, da es doch die viel sauberere Lösung ist.

Kommentar von frhi2015 ,

Hat super funktioniert. Nochmal danke!

Kommentar von Suboptimierer ,

Bitteschön!

Expertenantwort
von Iamiam, Community-Experte für Excel, 42

formal, vllt vergibt ja der FS noch eine Hilfreichste!

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten