For each - Schleife

Hallo zusammen,

ich habe eine kleine Tabelle mit 3 x 3 Zellen in denen Zahlen von 1 bis 5 stehen, wobei nicht jede Zahl vorkommt (das ist jeden Tag anders, da die Zahlen eine Bewertung von Differenzen darstellen). Diese Bewertung der Differenzen stelle ich grafisch als farbige Pfeile dar. Sowohl die Zahlen als auch die Pfeile sind in einer Übersichtstabelle vorbereitet, ich brauche also nur in Abhängigkeit der Zahl den richtigen Pfeil kopieren und in die richtige Zielzelle kopieren. Das funktioniert derzeit recht gut, allerdings nur, indem ich per for-schleifen alle zahlen von 1 bis 5 durchlaufen lassen - und das dauert mir zu lange.

Ich würde das Ganze gerne per For each-Schleife realisieren, da ich mir vorstellen könnte, dass dies etwas schneller geht. Leider komme ich damit nicht so ganz klar (weil ich auch den theoretischen Hintergrund nicht vollständig kenne/verstehe).

Mein Korsett sieht wie folgt aus:

for farbe=1 to 5
for each farbe in Range („A1:B3“)
 XXX
next farbe

XXX steht für das Problem das ich haben, denn jede Position im Bereich A1:B3 bestimmt auch gleichzeitig die Position in der Zieltabelle. Gibt es eine Möglichkeit die Zellenkordinaten jeder Farbe herauszufinden. Damit könnte ich dann arbeiten und die richtige Ziellzelle anwählen/berechnen.

Alternative Konstruktionen würde ich auch nehmen.

Grüße und Dank.

Moin, kackei,

Laufzeitprobleme bei einem 3x3-Feld? Watt et nich all gifft …

for farbe=1 to 5
for each farbe in Range („A1:B3“)
 XXX
next farbe

Streich den ersten for. Wenn Du die Zellen im Range ansprechen willst, dann schreib

Sub Subname

 Dim cell As Variant

 For Each cell In Range("a1:c3")
 If cell.Value = ...
 Next cell
End Sub

Wie Du an die Farben kommst, weiß ich allerdings nicht.

Gruß Ralf

Hallo Ralf,

mein bisheriger Code geht jede Zelle des Bereich für alle 5 Zahlen durch und für den Fall, dass eine Übereinstimmung auftritt wird im Zielbereich etwas reinkopiert. Das Problem mit der Zeit ist aus meiner Sicht einmal, das unnötige Durchlaufen aller Zellen - der zweite Punkt ist schon optimiert - ich habe es etwas vereinfacht dargestellt :wink:

Grüße und Dank.

Hallo Kackei,

lade mal mit fileupload o.ä. eine Beispielmappe hoch.
Derzeit blick ich da noch nicht durch.
Zeige natürlich das was da bestens funktioniert aber zu langsam ist.

Gruß
Reinhard

Hallo Reinhard.

ich habe mit dem Code
Sub Subname
Dim cell As Variant
For Each cell In Range(„a1:c3“)
If cell.Value = …
Next cell
End Sub

und der Ergänzung
zeile=cell.row bzw. spalte=cell.column

alle Infos die ich brauchte. Mir ging es darum, dass ich die Zelle mit dem gewünschten wert (hier dargestellt durch die Variable farbe) innerhalb der Tabelle verorten kann (also zB. A2). Das klappt jetzt und damit kann ich das Makro jetzt etwas effizienter durchlaufen lassen.

Grüße.

Hei ei,

ich habe mit dem Code
Sub Subname
Dim cell As Variant
For Each cell In Range(„a1:c3“)
If cell.Value = …
Next cell
End Sub

? watt soll ick denn mit diesem Codefragment?

und der Ergänzung

zeile=cell.row bzw. spalte=cell.column

Na toll, hilft mir sehr bedeutend. An sich wollte ich den Komplettcode sehen der deinen Angaben zufolge funktioniert aber zu langsam sei.
Auch um besser zu verstehen worums eigentlich geht.

Das langsamste was ich mir so vorstellen kann wäre:
For Zeile =1 To 3
For Spalte =1 to 3
For Farbe = 1 to 5
next

Und da komme ich auf max. 45 Durchläufe. Von Farbe, Pfeilen sehe ich auch nix.

alle Infos die ich brauchte. Mir ging es darum, dass ich die
Zelle mit dem gewünschten wert (hier dargestellt durch die
Variable farbe)

WO ist die dargestellt? Ic seh da nix farbiges.

Das klappt jetzt und damit kann ich das Makro jetzt etwas
effizienter durchlaufen lassen.

„klappt jetzt“? Durch die Antwort von Ralf?
Okay, ich muß ja nicht alles verstehen und vor allem: never touch a winning system. In diesem Sinne:

SChön daß wir dir helfen konnten.

Gruß
Reinhard

Grüße.

Hallo Reinhard,

der Ursprungscode bestand in der Tat aus einigen For Next-Schleifen. Die eigentliche Aktion habe ich nicht aufgelistet, weil für mich die Struktur der For-Schleife interessant war. Wollte eigentlich nur wissen, wie das mit der For each geht und ich die gefundene cell herausfinde, welche Koordinaten die Zelle nun hat, in der die entsprechende Zahl gefunden wurde.

Also: for each klappt und ist schneller, als meine For-Schleifen-Schachtelung und die Verortung ist mir auch gelungen.

Daher keine weiteren Ausführungen. Ein Zeittest hat ergeben, dass bei 9 Ziffern zwischen 1 und 5 im 3 x 3 -Zellenraster die Aufgabe in weniger als 1 Sekunde durchläuft, vorher waren es doch glatt zwischen 1 und 2 Sekunden.

Grüße.