Hallo zusammen,
ich hab mich hier mit demselben Thema schon mal an Euch gewandt und brauch nochmal kurz Eure Hilfe.
Alter Teil:
Ich soll für die Planung der Kostenstellen ein Makro schreiben, weil wir wegen eines Tools etwas eingeschränkt sind in der Excelbearbeitung. Und zwar generiert mir mein Tool eine Tabelle und diese will ich auf ein zweites Tabellenblatt kopieren. Auf der zweiten Seite kann ich dann mittels Copy Paste dann die Tabelle eventuell mit neuen Werten überschreiben. Das Makro soll mir jetzt folgendes ermöglichen:
Erst soll die Tabelle kopiert werden auf Tabellenblatt 2.
Mit einem Druck auf den Command Button beginnt der Tabellenvergleich:
Dabei wird Zeile pro Zeile vorgegangen: Die Kostenstelle in der ersten Zeile von der Kopie wird in eine Variable gespeichert und in der ursprünglichen Tabelle auf Tabellenblatt 1 gesucht. Daraufhin wird die komplette Zeile der Kopie mit der zugehörigen Zeile der Kostenstelle in der ursprünglichen Tabelle verglichen. -
Sollten diese identisch sein (keine unterschiedlichen/überschriebenen Werte, wird die Zeile in Tabellenblatt Kopie gelöscht.
Sind einzelne/mehrere Werte verschieden, so wird die Zeile in Kopie kopiert und in das Tabellenblatt 1 in der Zeile der richtigen Kostenstelle eingefügt (--> überschrieben!) Die Zeile in "Kopie" wird gelöscht
Sollte es die Kostenstelle in Tabellenblatt 1 überhaupt noch nicht geben, was vorkommen kann, so wird diese einfach in der Tabelle in Tabellenblatt 1 unten angefügt. Die Zeile in "Kopie" wird gelöscht.
Somit sollten am Schluss keine Zeilen mehr im Tabellenblatt Kopie vorhanden sein und die Zeilen einzeln in das ursprüngliche Tabellenblatt übertragen worden sein. Leider geht das nur Zeile für Zeile, da aufgrund des Tools kein kompletter Datensatz mittels Copy Paste in das ursprüngliche Tabellenblatt übertragen werden können. Das wäre natürlich viel einfacher und würde kein Makro benötigen...
Sub Vergleich()
Dim Zelle As Range
Dim wsOr As Worksheet, wsKo As Worksheet
Dim Suchrange As Range, Kopierrange As Range
Set wsOr = ThisWorkbook.Worksheets("Tabelle1")
Set wsKo = ThisWorkbook.Worksheets("Kopie")
Set Kopierrange = wsKo.UsedRange.Columns(1).Offset(1, 0)
For Each Zelle In Kopierrange.Resize(Kopierrange.Rows.Count - 1).Cells
Set Suchrange = wsOr.Columns(1).Find(what:=Zelle.Value, LookIn:=xlValues, LookAt:=xlWhole)
If Suchrange Is Nothing Then
Zelle.EntireRow.Copy wsOr.Cells(wsOr.Rows.Count, 1).End(xlUp).Offset(1, 0)
Zelle.EntireRow.Clear
Else
Zelle.EntireRow.Copy Suchrange
Zelle.EntireRow.Clear
End If
Next Zelle
Set wsOr = Nothing
Set wsKo = Nothing
Set Kopierrange = Nothing
End Sub
Das hat mir auch schon alles gelöst. Nur verschieben sich innerhalb meines Tabellenblattes jetzt die Spalten und dann komm ich wieder nicht mehr klar, weil ich mit der Offset Funktion so meine Schwierigkeiten hab. Und zwar finde ich jetzt meine zu suchende Kostenstelle in Spalte B (2) ab Zeile 11 im Tabellenblatt Kopie und kopiere dann die Zeile in Spalte B ab Zeile 11 im Tabellenblatt Original. Wahrscheinlich total einfach, aber ich steh auf dem Schlauch. Es geht nur um die Verschiebung der Kopier und der Suchrange, soweit ich das richtig verstanden hab!
-------------------------------------------------------------------------
Folgendes Beispieldokument mit ein paar Kommentaren hab ich letztes Mal erstellt: http://www.herber.de/bbs/user/130569.xlsm
Unendlich viel Dank an die- oder denjenigen, der mir hier raushilft!!!
|