Ich gehe mal davon aus, dass du weißt...
15.05.2008 22:16:29
aus,
...wie das mit Formeln ginge, Heinrich!
Mit VBA kann's für dich als Anfänger schon recht kompliziert wdn, je nach dem wie du das lösen willst. Dabei scheidet eine Möglichkeit mit Sicherheit aus - der Makrorecorder! Allerdings könntest du ihn nutzen, um erst einmal den äußeren Rahmen für dein Makro zu bekommen: Anschalten - eine Eintragung manuell vornehmen - Ausschalten
Anschließend musst du um diese Übernahmeaktion herum einen Wiederholungszyklus konstruieren, der...
1. die Indexspalte von TabA zeilenweise abfragt (mit Laufindex i) und in TabB mit der dortigen Indexspalte vergleicht und dabei einen 2.Laufindex j erhöht,
2. mit dem ermittelten Laufindex j den entsprechenden Wert aus Spalte "Status" von TabB liest und...
3. diesen Wert dann in TabA in Spalte "Status" unter Laufindex i einträgt.
Klassisch kann man das mit 2 ineinander "geschachtelten" For...Next-Zyklen (oft auch "Schleifen" genannt) lösen. Es gibt allerdings auch noch andere Möglichkeiten...
Am Makroanfang solltest du alle zur Anwendung kommenden Variablen deklarieren (mit Dim), also auch die 4 Spaltenbereiche festlegen (im Bsp IdxA, IdxB, StatA, StatB As Range) und die beiden Laufindizes als Long vereinbaren. Den 4 Bereichsvariablen müssen dann natürlich noch die entsprechenden Spaltenbereiche mit Set name = ... zugewiesen wdn
Der "Doppelzyklus" könnte dann so aussehen...
For i = 1 To IdxA.Cells.Count
For j = 1 To IdxB.Cells.Count
If IdxA.Cells(i) = IdxB.Cells(j) Then
StatA.Cells(i) = StatB.Cells(j)
Exit For
End If
Next j
Next i
Der rot geschriebenen Anweisung entspricht auch die vom Makrorecorder aufgezeichnete Datenübernahme, obwohl die sicher etwas anders, nämlich mit direktem Bereichsbezug, aussieht.
Das Exit For sorgt dafür, dass der innere Zyklus nicht unnötig weiter durchlaufen wird, wenn der Vgl erfolgreich war.
Gruß Luc :-?
PS: Falls du damit ein Performance-Problem haben solltest, müsstest du statt des inneren Zyklus mit den Methoden .Find, .Copy und .Paste arbeiten. Wenn du das Ganze auch automatisieren willst, solltest du dir das ArbeitsmappenEreignis Workbook_BeforeSave ansehen...