VBA -Werte nach Datum in bestehende Liste einfügen

Bild

Betrifft: VBA -Werte nach Datum in bestehende Liste einfügen
von: NicNac75
Geschrieben am: 22.07.2015 13:09:50

Hallo liebe Foren-Mitglieder,
nachdem mir dieses Forum in der Vergangenheit immer wieder beste Dienste erwiesen hat, um mein gefährliches Halbwissen etwas zu vergrößern, will ich es heute mal mit einer eigenen Frage versuchen, für die ich bislang keine Lösung gefunden habe:
Ich möchte ganze Zeilen (immer gleicher Aufbau) mittels VBA in eine existente Liste kopieren, Aufbau: Datum; Wert, Wert, Wert, ...., Wert.
Die Herausforderung (zumindest für mich bislang nicht lösbar):
Ist in der Liste eine Zeile mit Datum in der ersten Spalte = dem Datum der einzufügenden Zeile, dann soll die Zeile überschrieben werden.
Ist das Datum neuer als das aller schon existenten Zeilen, dann soll der Wert in die nächstfreie Zeile kopiert werden.
Es soll also eine Liste entstehen, in der jedes Datum mit den dazugehörigen nebenstehenden Werten der Zeile nur einmal existiert. Ziel ist es darüber ein Verarbeitungsprotokoll zu erzeugen (falls dies für das Verständnis wichtig sein sollte).
Hier nochmals im Detail (mit Beispiel):
Existente Liste:
01.07.2014 Günter Dieter Hans Elvis 990 k6t
02.07.2014 Peter Günter Klaus Simon 461 i71
03.07.2014 Hans Günter Karl Emil 555 kl1
04.07.2015 Lothar Boris Klaus Elvis 880 l88
05.07.2015 Emil Richard Hans Klaus 771 p55
Szenario 1: in die obige Liste zu kopierende Zeile, Datum schon vorhanden - Ziel: Zeile ersetzen
03.07.2014 Ida Monika Klara Petra 874 o85
Szenario 2: in die obige Liste zu kopierende Zeile, Datum noch nicht vorhanden - Ziel: Zeile unten anfügen
08.07.2014 August Karl Heinrich Dieter 779 D4w
Mir schwebt folgendes vor:
a) Kopiere Zeile (die eingefügt werden soll) aus anderem Tabellenblatt
b) Prüfe ob in Spalte A (dort steht das Datum) das Datum aus der ersten Zelle der einzufügenden Zeile schon vorhanden ist
c) wenn ja, dann einfügen und ersetzen in dieser Zeile
d) wenn nein, dann einfügen in der ersten freien Zeile unter der Liste
e) Gesamte Liste nach Spalte A sortieren (das kriege ich selbst hin)
Müsste also eine Art Suchen/Ersetzen kombiniert mit Wenn/Dann Funktion werden...
Ich hoffe, ich konnte mein Anliegen klar machen und würde mich freuen, wenn mich jemand bei der Lösung unterstützen könnte, wie ein entsprechendes Makro aussehen müsste.
Schon vorab vielen Dank für jegliche Hilfestellung.
Schon vorab vielen Dank für Eure Unterstützung.

Bild

Betrifft: Musterdatei?
von: Klexy
Geschrieben am: 22.07.2015 15:32:51
Und warum lädst du keine Musterdatei hoch?

Bild

Betrifft: AW: Musterdatei?
von: NicNac75
Geschrieben am: 22.07.2015 17:06:46
Hallo Klexy,
erstmal danke für Deine Antwort - hatte gehofft, es würde auch ohne funktionieren.
Hier in Dateiform.
https://www.herber.de/bbs/user/99018.xlsx
Viele Grüße,
NicNac75

Bild

Betrifft: Vorgehensweise...
von: Frank
Geschrieben am: 22.07.2015 17:09:27
Hallo,
a) braucht's nicht. Werte können direkt zugewiesen werden

Sheets("Ziel").cells(2,1).value=Sheets("Quelle").cells(5,1).value

Weist Zelle A2 des Blattes "Ziel" den Wert der Zelle A5 von Blatt "Quelle" zu
b)IF-THEN
If not isempty(Sheets("Ziel").cells(2,1).value) then
   'Mach irgendwas
end if

Guckt ob in Zelle A2 Blatt "Ziel" was drinsteht. Wenn nicht wird der Code der Then-Prozedur ausgeführt
c) siehe b)
If Sheets("Ziel").cells(2,1).value=Sheets("Quelle").cells(5,1).value then
   'Mach irgendwas
end if

d) ELSE verwenden
If Sheets("Ziel").cells(2,1).value=Sheets("Quelle").cells(5,1).value then
   'Mach irgendwas
Else
   lZZ=Sheets("Ziel").Range("A10000").end(xlup).row
   Sheets("Ziel").cells(lZZ+1,1).value=Sheets("Quelle").cells(5,1).value 
end if

Ist die erste Bedingung nicht erfüllt, wird der Code des ELSE-Teils ausgeführt. Im Beispiel wird die letzte benutzte Zeile in Spalte A ermittelt und der Variablen lZZ zugewiesen. Damit wird dann die Zelle adressiert, in der der neue Wert stehen soll.
Grüsse,
Frank

Bild

Betrifft: AW: Vorgehensweise...
von: NicNac75
Geschrieben am: 22.07.2015 17:29:44
Hallo Frank,
vielen Dank - verstanden und hilft sehr, aber um die Liste sozusagen auf einen Treffer abzugrasen, müsste ich doch vermutlich noch eine Schleife einfügen, oder? Er soll ja Zeile für Zeile auf Übereinstimmung prüfen und dann
a) bei Übereinstimmung einsetzen (Werte ersetzen/Überschreiben)
b) erst wenn keine Übereinstimmung gefunden wird, unten anfügen.
Mit fehlt also noch die Dynamik um die existente Liste zu durchsuchen, ansonsten aber verstanden.
Danke soweit schon mal, vielleicht kannst Du mir auch für das fehlende "Puzzle-Teil" weiterhelfen...;-)

Bild

Betrifft: AW: Vorgehensweise...
von: Klexy
Geschrieben am: 22.07.2015 18:19:19
Genau diese Thematik war hier die Frage:
https://www.herber.de/forum/archiv/1436to1440/t1437408.htm

Bild

Betrifft: AW: Vorgehensweise...
von: NicNac75
Geschrieben am: 23.07.2015 07:29:39
Hallo Klexy,
danke, ohne Deine Hilfe hätte ich diesen Thread sicher nicht gefunden. Mit der dortigen Lösung sollte ich auch in meinem Fall weiterkommen.
Vielen Dank für die Unterstützung.

 Bild

Beiträge aus den Excel-Beispielen zum Thema "VBA -Werte nach Datum in bestehende Liste einfügen"