Clever-Excel-Forum

Normale Version: 2 Excel Tabellen vergleichen Power Query /VBA
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo liebes Forum....ich brauche mal dringend Eure Unterstützung.

Ich habe folgendes Problem. Ich habe es schon versucht in einem Forum zu beschreiben, aber das ist mir nicht sehr gut gelungen. Es ist für mich gar nicht so einfach die Problemstellung verständlich zu beschreiben.
Ich habe 2 Excel Tabellen die ich miteinander vergleichen möchte. Jeden Tag wird aus einer Datenbank eine Exceldatei erzeugt.

Die Excel Datei die aus der Datenbank erzeugt wird sieht so aus.
[attachment=38347]

Diese Excel Datei wird von mir per Hand bearbeitet. Ich füge eine zusätzliche Spalte "Sachstand" ein.
In diese Spalte trage ich die Sachstände(Gelb) zu den Auftragsnummern ein z.B. Ersatzteil zum Auftrag fehlen etc.
Die Auftragsnummer ist nur einmalig vorhanden und identifiziert den Auftrag eindeutig.
[attachment=38348]


Am nächsten Tag wird wieder aus der Datenbank eine Excel Datei erzeugt.

[attachment=38350]

Jetzt kann sich der Datenbestand geändert haben, wie hier im Beispiel die zusätzlichen Datensätze in "ROT",
oder es kann auch eine Zeile weniger vorhanden sein, weil ein Auftrag fertig gestellt ist und die Auftragsnummer nicht mehr benötigt wird.
Nun wird auch in dieser Datei die zusätzliche Spalte "Sachstand" benötigt. In dieser Spalte Sachstand sollen die Inhalte vom Vortag eingetragen werden.

Spalte "Sachstand" (GELB) vom Vortag aus der Datei Sachstand_Auftrag_Alt.xlsx soll wieder den
zugehörigen Auftragsnummern zugeordnet werden.

[attachment=38351]

Der Inhalt der Datei ändert sich täglich, so das es immer eine Datei "Alt" und "Neu" gibt.

Ich habe es mit Power Query versucht aber nicht richtig hinbekommen. Ich habe auch schon an VBA gedacht- Alles über eine Schleife einlesen in ein Array speichern, dann einen Vergleich über die Auftragsnummer durchführen wenn Auftragsnummer gleich dann Wert aus der Spalte Sachstand zuordnen...aber das muss doch einfacher gehen...

Ist warscheinlich für Euch kein Problem......bin für jeden Tipp dankbar...Dankeschön



[attachment=38344]
[attachment=38345]
Hola,

dann sag im anderen Forum wenigstens Bescheid dass es jetzt hier weitergeht.

Gruß,
steve1da
Danke für den Hinweis...habe ich gerade gemacht....
Hallo

lade dir bitte mal diese Beispieldatei herunter und lass dich überraschen. Ich denke es ist mein Meisterstück.

Diese Startdatei muss beim 1. Öffen noch eingerichtet werden. Deshalb blockiert eine MsgBox die automatische Makro Ausführung!!
Nachdem du deinen Pfad und deine Datei Namen in den Const Anweisungen eingegeben hast, im Modul bitte noch die MsgBox und Exit Sub löschen!  Die Datei schliessen und neu starten.  Sie öffnet Sachstand Alt + Neu, kopiert die Daten, und schliesst Datei Alt wieder. Geöffnet bleibt nur die Datei "Sachbestand Neu" mit den kopierten Daten.

Ich denke die Lösung ist mehr als du dir jemals vorgestellt hast. Der zweite Vorteil für dich:  beide Dateien Alt und Neu bleiben dir als xlsx Dateien erhalten, denn das Makro befindet sich in einer eigenen Mappe. Das ist eine xlsm Datei!  

mfg Gast 123

Nachtrag  sollte der Datensatz in Alt und Neu nicht komplett übereinstimmen wird nicht kopiert und du bekommst ein Fehlermeldung. 
Probier es bitte mal aus indem du absichtlich die Abteilung oder den Bearbeiter falsch eingibst.
Das könnte man wie hier beschrieben machen
https://exceleratorbi.com.au/self-refere...wer-query/
(16.04.2021, 21:34)Gast 123 schrieb: [ -> ]Hallo

lade dir bitte mal diese Beispieldatei herunter und lass dich überraschen. Ich denke es ist mein Meisterstück.

Diese Startdatei muss beim 1. Öffen noch eingerichtet werden. Deshalb blockiert eine MsgBox die automatische Makro Ausführung!!
Nachdem du deinen Pfad und deine Datei Namen in den Const Anweisungen eingegeben hast, im Modul bitte noch die MsgBox und Exit Sub löschen!  Die Datei schliessen und neu starten.  Sie öffnet Sachstand Alt + Neu, kopiert die Daten, und schliesst Datei Alt wieder. Geöffnet bleibt nur die Datei "Sachbestand Neu" mit den kopierten Daten.

Ich denke die Lösung ist mehr als du dir jemals vorgestellt hast. Der zweite Vorteil für dich:  beide Dateien Alt und Neu bleiben dir als xlsx Dateien erhalten, denn das Makro befindet sich in einer eigenen Mappe. Das ist eine xlsm Datei!  

mfg Gast 123

Nachtrag  sollte der Datensatz in Alt und Neu nicht komplett übereinstimmen wird nicht kopiert und du bekommst ein Fehlermeldung. 
Probier es bitte mal aus indem du absichtlich die Abteilung oder den Bearbeiter falsch eingibst.

Das ist ein netter Lösungsansatz!

Nur ein paar Vorschläge:

1. Warum muss man den Pfad in den Code einfügen? Verwende doch ThisWorkBook.Path, schlage ich vor. Im jetzigen Zustand sperrt sich Dein Anwender selbst aus, wenn er testweise einen Pfad einfügt und die MsgBox/Exit Sub löscht. Dann darf er erst einmal nach der Information suchen, dass man beim Excel Aufruf Shift (die Hochstelltaste) gedrückt halten muss, damit das Makro nicht ausgeführt wird, wenn er eine Chance haben, eine weitere Änderung durchzuführen.
2. Woran erkennt man, dass Dein Programm bereits ausgeführt wurde? Vielleicht wäre ein Logging nützlich.
3. Füge auch eine Versionsnummer ein, damit man weiß, dass man die aktuellste Version Deines Programms verwendet.
4. Die alte Datendatei kannst Du ReadOnly öffnen, weil Du sie nicht veränderst.
5. Was wäre sinnvoll, wenn man die neue Datei täglich erstellen muss? Nun, sicherlich eine tägliche Kopie, z. B. ein Unterverzeichnis Data\20210417\Sachstand_Auftrag_neu.xlsx oder Data\Sachstand_Auftrag_20210417.xlsx. Damit wäre auch Punkt 2. abgedeckt.
6. Allgemein würde ich vorschlagen, die manuell einzufügenden Daten (hier Sachstand) zusammen mit ihrem Identifikationsschlüssel (hier die Auftragsnummer) ALLEIN als eigene Datei abzuspeichern und eine Kopie davon im Tagesordner abzulegen.
Hallo

@Sulprobil   vom Programm her ist es vielleicht kein Meisterstück, der Code kann noch verbessert werden, wie mit ThisWorkbook.Path. Oder mit ReadOnly Open. Danke für diese Tipps.  Ich denke das meine Idee es so zu machen sehr gut ist.  Ich hatte zuerst überlegt das Makro in die Datei "Neu" zu integrieren, die müsste dann aber jedesmal als xlsm gespeichert werden.  So kann man beide öffnen, kopiert die Daten, und wie gewohnt mit der Neuen Datei weitermachen. Deshalb die seperate Makro Startdatei.

Ich warte mal in Ruhe ab was der Frager dazu sagt.  Im Herber Forum ist er ja bereits durch Crossposting "verbrannt".
Hier bekommt er wenigstens eine m.E. gute und praxisgerechte Lösung angeboten. Den Code noch mal zu verbessern, da habe ich nichts dagegen.

mfg Gast 123
Nachtrag   Ich habe gerade aus Neugier die ThisWorkbook.Path Version bei mir getestet. Das klappt leider nicht, Laufzeitfehler, obwohl alle Dateien im gleichen Ordner "Clever Forum\Anfrage Offen" liegen. Aendern kann man aber:  Workbooks.Open Filename:=Pfad & SB_Alt, ReadOnly:=True
Mehr werde ich an diesem Thread auch nicht tun, ich denke das ist weit mehr als der Frager sich erhofft hat ...
Dankeschön ich werde es gleich mal ausprobieren...bin leider gerade erst von der Arbeit gekommen...

Danke für die Bemühungen und Unterstüzung...
Hallo

Ich würde so vorgehen:
A)Einen Ordner erstellen irgendwo nach Wunsch.
B)In diesen Ordner alle deine benötigten Dateien drin speichern egal ob xlsx oder xlsm, wichtig ist das im Dateinamen das Datum und vielleicht noch die Uhrzeit. 
C)Dann mit PQ die Datei einlesen, auch hier ist es wichtig das PQ so eingestellt das immer die neueste Datei eingelesen wird.
D) Jetzt deine Bearbeitung bzw. deine Erweiterungen im PQ Editor oder auch im Tabellenblatt machen.
E) Nach der Bearbeitung bzw. Erweiterung diese Datei per Makro in den zuvor angelegten Ordner speichern mit Datum und eventuell Uhrzeit. 
Jetzt braucht man nur noch die PQ zu aktualisieren und man hat sie auf dem Aktuellen Stand.
Seiten: 1 2