Verschiedene Spalten mittels VBA in neuer Reihenfolge in neues Excel Importieren

onthetop79
Goto Top

Hallo Zusammen

Ich bräuchte mal wieder Eure Hilfe. Ich muss auch hier zu Beginn gleich offen gestehen, dass ich mit VBA bis anhin nichts am Hut hatte. Jedoch keinen Weg sehe der für solche Problemstellungen daran vorbei führt.

Ich habe folgendes Problem:

Ich bekomme von verschiedenen Lieferanten Preislisten und Preisaktualisierungen als Excel. Da ich diese letztendlich in ein und der selben Formatierung und Reihenfolge haben muss und die Fehler Quelle bei händischen Copy/Paste Übungen relativ gross sind, möchte ich über VBA diese Daten zusammen ziehen können.

Als Vorlage habe ich ein Master aus welchem ich gerne die Quelldatei auswählen und anschliessend die Spaltenzuordnung bestimmen würde. Beim Import soll die Spalten Überschrift der Quelldatei weggelassen werden und die darunterstehenden Daten in der Masterdatei in die vorgewählte Spalte abgefüllt werden. Nach dem Import sollten die Daten in der Master Datei als neue Datei in einem definierten Pfad abgespeichert werden können.

Da die Spalten Reihenfolge in den Quelldatei immer unterschiedlich ist, müssen diese pro Importauftrag gewählt werden können. Die Masterdatei bleibt immer gleich.

Da diese Arbeiten immer öfters d.h z.Z Monatlich für ca. 10 verschiedenen Lieferantenpreislisten durchgeführt werden müssen, möchte ich so die Möglichkeit schaffen, diese Arbeiten intern delegieren zu können. Dies ist nur möglich wenn ich dies "Deppensicher" automatisieren kann.

Hat jemand von Euch schon solch ein VBA Script geschrieben oder könnte mir da jemand zur Hand gehen.

Content-Key: 183880

Url: https://administrator.de/contentid/183880

Ausgedruckt am: 28.06.2022 um 21:06 Uhr

Mitglied: mak-xxl
mak-xxl 21.04.2012 um 09:47:10 Uhr
Goto Top
Moin ganzoben79,

Zitat von @onthetop79:
... Da die Spalten Reihenfolge in den Quelldatei immer unterschiedlich ist, müssen diese pro Importauftrag gewählt werden können. ...

Aber pro Lieferant haben die Tabellen immer die gleiche Struktur?

Da diese Arbeiten immer öfters d.h z.Z Monatlich für ca. 10 verschiedenen Lieferantenpreislisten durchgeführt
werden müssen, möchte ich so die Möglichkeit schaffen, diese Arbeiten intern delegieren zu können. Dies ist
nur möglich wenn ich dies "Deppensicher" automatisieren kann.

Wenn Du das per fester Verknüpfung (siehe Frage oben) realisieren kannst, reduziert sich das Ganze auf ein Öffnen der Mastertabelle -> Daten werden automatisch aktualisiert (Vorliegen aktueller Lieferantendateien vorausgesetzt) -> Makro an Schaltfläche für 'Speichern einer Kopie unter' ...

Freundliche Grüße von der Insel - Mario
Mitglied: bastla
bastla 21.04.2012 um 16:24:39 Uhr
Goto Top
Hallo onthetop79!

Eine Umsetzung Deiner Vorstellungen in VBA würde etwa so aussehen:
Dieses Makro zunächst in die Masterdatei einfügen und diese speichern (Dateityp ab Excel 2007: "Excel-Arbeitsmappe mit Makros").

Danach kann die Importdatei einfach geöffnet und bearbeitet werden. Angenommen habe ich, dass die Daten ab Zeile 2 beginnen (in Zeile 1 stehen die Spaltenüberschriften / Feldnamen) - falls nicht, Zeile 6 des Makros anpassen. In der Zeile über der ersten Datenzeile (also defaultmäßig Zeile 1) kannst Du dann ganz einfach die gewünschte Spaltenreihenfolge festlegen, indem Du die Überschriften durch die Zahlen 1, 2, 3 .. ersetzt. Spalten, die nicht übernommen werden sollen, behalten die bisherige Spaltenüberschrift.

Wenn Du dann das Makro ausführst, werden die Spalten in dieser vorgegebenen Reihenfolge in die Masterdatei (ab der in den Zeilen 4 und 5 des Makros angegebenen Position) übernommen. Danach wird nach dem neuen Dateinamen gefragt und unter diesem Namen gespeichert. Die neue Dateie (auf Wunsch - siehe Zeile 22) und die Importdatei werden geschlossen sowie die "Original"-Masterdatei wieder geöffnet.

Verarbeitet wird übrigens immer die erste gefundene offene Arbeitsmappe (aber natürlich nicht die Masterdatei) - es sollten daher nur die Masterdatei und die Importdatei beim Start des Makros geöffnet sein.

Grüße
bastla
Mitglied: Assistenz
Assistenz 14.11.2019 um 13:48:05 Uhr
Goto Top
Hallo bastla,

vielen Dank für den Input.
Meine Frage: Kann ich die Reihenfolge der Spalten (also die Spaltensortierung) auch aus der Masterdatei auslesen lassen?

Hintergrund:
Ich mache eine komplexe Planung einer komplexen Tour. Im Verlauf der Planung werden mich adnere ablösen in der Zuständigkeit und manche Spalten werden unwichtiger, andere sollten nach vorne rutschen. Wöchentlich wird es einen Import-Routine von "Anmeldedaten" aus dem Backend der Projekt-Website geben - Bewerber geben ihre Daten über's Frontend ein.
Wenn nun die Daten automatisch in der zum jeweiligen Import-Zeitpunkt gegebenen Spaltenreihenfolge sortiert und importiert werden könnten wäre das genial!

Gibt's Ideen? War es verständlich dargelegt?

Beste Grüße!
Mitglied: mak-xxl
mak-xxl 19.11.2019 um 11:57:27 Uhr
Goto Top
Hallo Guliano,

nach so vielen Jahren ...

Bastla ist möglicherweise beschäftigt, deshalb ich - bist Du sicher, dass es noch um die gleiche Sache geht? Weil - 2012 schriebst Du von Lieferanten und Preisen, jetzt von Userdaten?
Egal - mit der obigen Routine können doch jedwede Daten sortiert eingelesen werden! Was soll sich ändern?

Freundliche Grüße von der Insel - Mario
Mitglied: Assistenz
Assistenz 19.11.2019 um 12:30:50 Uhr
Goto Top
Hallo - vielen Dank!

Naja, 2012 war ja nicht ich. Aber weil ich den (laienhaften) Eindruck hatte, mit der obigen Routine könnte das - leicht angepasst - auch für meinen Bedarf passen, habe ich mich eingeklinkt anstatt ein neues Thema zu eröffnen.

Also was ich machen möchte:
- Wöchentlich "Bewerbungsdaten" von einem Online-Formular über's Backend exportieren im xls-Format, ich nenne es jetzt "Imp.xls" Imp.xls hat 1. eine andere Spaltenreihenfolge als und 2. nicht die gleiche Spaltenanzahl wie meine "Master.xls" .
- Dann sollen alle neuen (!) Einträge (Zeilen) aus Imp.xls in Master.xls importiert werden und dabei 1. die richtige Spaltenreihenfolge haben und 2. um die in Imp.xls fehlenden Spalten ergänzt werden (diese bleiben dann zunächst leer).

Hast du dazu eine Idee, wie das umgesetzt werden könnte?

Liebe Grüße!
Julian
Mitglied: mak-xxl
mak-xxl 19.11.2019 um 12:55:09 Uhr
Goto Top
Hallo Julian,

Die Datei 'imp.xls' und 'master.xls' weichen also in Spaltenzahl und -sortierung ab - wäre es eine Option, die 'master.xls' der 'imp.xls' per Sortierung etc. vorab anzugleichen oder ändert sich die 'imp.xls' immer mal wieder? Wenn ja, wäre es evtl. besser, jeden Importvorgang in der 'master.xls' auf einem neuen Blatt landen zu lassen und anschließend die Sortierung und/oder das eventuell erwünschte Umkopieren auf ein "Masterblatt" in der 'master.xls' (per Makro) vornehmen zu lassen.

Freundliche Grüße von der Insel - Mario
Mitglied: Assistenz
Assistenz 21.11.2019 um 13:05:11 Uhr
Goto Top
Hi Mario,

Zu deiner Frage:
Imp.xls ändert sich evtl. noch hin und wieder.
Master.xls würde ich gerne nicht anpassen, wenn dann andersrum: Imp.xls könnte jeweils vor dem Importvorgang angepasst werden - dann aber eben gerne automatisiert um Fehler zu vermeiden.

Zur 2. Frage:
Das könnte auch eine Option sein. Wie würde das funktionieren?

Vielen Dank und beste Grüße!
Julian
Mitglied: Assistenz
Assistenz 21.11.2019 aktualisiert um 15:25:49 Uhr
Goto Top
Bzw. die erste, grundlegendste Frage:
Wie kann ich ein Tabellenblatt automatisiert nach der Spalten-Reihenfolge und -zahl eines anderen Blattes anpassen lassen?

Beispiel:
  • Master.xls hat folgende Spalten: A: Veranstaltungsname, B: Kategorie, C: Startdatum, D: Enddatum
  • Imp. xls hat dagegen folgende Spalten (-Reihenfolge): A: Vorname, B: Name, C: Institution, D: e-Mail
  • Die Spalten von Imp.xls erscheinen in Master.xls erst später und dann in variierter Reihenfolge
  • Zu allem übel ist der Spaltenname in Imp.xls teilweise auch etwas anders als in Master.xls (Z. B. "Telefonnummer statt Telefon", oder "Kommentar" statt "Mitteilung von Bewerber*in") - gibt's dafür überhaupt eine Möglichkeit?

Ziel: Daten aus Imp.xls sollen - jeweils in einer Zeile - an der richtigen Stelle in Master.xls landen. Wenn ich etwas von Hand zu kopieren habe, wäre das kein Problem. Nur will ich es vermeiden, die Sortierung manuell vorzunehmen (fehleranfällig) und jede Zelle einzeln zu kopieren.

Ist das verständlich ausgedrückt?

Danke!
Mitglied: mak-xxl
mak-xxl 21.11.2019 um 18:36:16 Uhr
Goto Top
Hallo Julian,

verständlich ausgedrückt - trotzdem folgende Frage:

Die Datei 'imp.xls' wird, nach meinem bisherigen Verständnis, von einem Script etc. gefüllt, das die Daten aus einem Formular
etc. entnimmt und importiert bzw. einträgt? Wenn sich das Formular (also die Datenquelle) ändert, wird die 'imp.xls' also auch
diese Änderungen repräsentieren?

Die Datei 'master.xls' soll sich nicht ändern - das wäre mit einer einfachen und einer aufwendigeren Lösung machbar:

1. einfache Lösung:
Aus der Datei 'imp.xls' werden jeweils die Kopfzeile und die Datenzeilen importiert.
Das kann in der Datei 'master.xls' auf einem Blatt oder, wie bereits erwähnt, auf Einzelblättern erfolgen - die dann i.e. das
Datum des Einlesens der Daten tragen.

2.1. umfangreichere Lösung A:
Das Script/modul/Makro etc., dass die Daten in die 'imp.xls' bringt, nimmt bereits eine Vorsortierung
dergestalt vor, dass i.e. der Vorname, egal wie der Feldname im Formular heißt, immer i.e. in der ersten Spalte der 'imp.xls'
landet. Kann an diesem Script nichts verändert werden, so kann diese Zuordnung auch beim Importieren der Daten aus der
'imp.xls' in die 'master.xls' vorgenommen werden, etwa so:

2.2. umfangreichere Lösung B
- Es gibt eine Hilfstabelle (in der master.xls'), in der als Spaltenüberschrift jeweils eine Bezeichnung (= die Spaltenüberschrift)
der Mastertabelle steht - also i.e. 'Vorname'. darunter sind dann alle Bezeichnungen eingetragen, wie sie in der 'imp.xls' dazu
vorkommen können, also i.e. 'Firstname', 'Vorname', 'Callname' oder was auch immer. Dies wird für jede vorhandene Spalte
der Mastertabelle in der Hilfstabelle hinterlegt und ist auch in der Zukunft immer wieder vom User anpassbar.

- Eine Routine (Makro) in der 'master.xls' ordnet anhand dieser Hilfstabelle die aus der 'imp.xls' gelesenen Daten (= Zellinhalt)
jeweils eine Zielzelle in der Mastertabelle der 'master.xls' zu. Eine Fehlerbehandlung garantiert, dass dem User Daten mit
nicht zuordenbarer Spaltenüberschrift zur Entscheidung vorgelegt werden.

Nun bleibt noch zu sagen, dass der Weg des Importes der jeweiligen Spaltenüberschriften aus der 'imp.xls' der einfachere Weg wäre, dazu kommt, das dann der 'master.xls' zusätzlich zu entnehmen wäre, wann sich jeweils die Struktur der Quelle geändert hat.

Vielleicht noch dies: Die Daten der Hilfstabelle können auch im Quelltext des Makros (i.e. als Array) abgelegt werden, können aber dann durch den Anwender u.U. nicht oder schwer geändert werden.

Nun hoffe ich, dass es verständlich und verdaubar ist.

Freundliche Grüße von der Insel - Mario
Mitglied: Assistenz
Assistenz 22.11.2019 aktualisiert um 10:48:09 Uhr
Goto Top
Zitat von @mak-xxl:
Die Datei 'imp.xls' wird, nach meinem bisherigen Verständnis, von einem Script etc. gefüllt, das die Daten aus einem Formular
etc. entnimmt und importiert bzw. einträgt? Wenn sich das Formular (also die Datenquelle) ändert, wird die 'imp.xls' also auch
diese Änderungen repräsentieren?
Ja, wobei das nicht verändert werden kann - es ist ein fest installiertes "Feature" des Backends eines Templates, das für die Erstellung&Verwaltung der Website verwendet wurde/wird.


Zitat von @mak-xxl:
- Eine Routine (Makro) in der 'master.xls' ordnet anhand dieser Hilfstabelle die aus der 'imp.xls' gelesenen Daten (= Zellinhalt)
jeweils eine Zielzelle in der Mastertabelle der 'master.xls' zu. Eine Fehlerbehandlung garantiert, dass dem User Daten mit
nicht zuordenbarer Spaltenüberschrift zur Entscheidung vorgelegt werden.

2.2 scheint mir passend zu sein - vor allem bei dem Gedanken, dass evtl. eine andere Person ab dem neuen Jahr den Job übernimmt und noch weniger Peil hat als ich :) face-smile

Meine Fragen dazu:
  • Sind 1. und 2.2 (sinnvoll) kombinierbar? (Denn das mit dem Datum des Einlesens könnte wertvoll sein. Optional könnte diese Information aber auch in einer zusätzlichen Spalte in Master.xls abgelegt werden).
  • Hast du ein passendes Makro, das ich verwenden könnte? (Ich habe die nötigen Skills dazu nicht).

Vielen Dank für die Geduld und Hilfe!
Julian
Mitglied: mak-xxl
mak-xxl 22.11.2019 um 13:07:34 Uhr
Goto Top
Hallo Julian,

dazu werde ich 2 Excel-Dateien erstellen, mit ein paar Daten und dem Quelltext füllen und an Dich versenden.

Danach wird es sicher Fragen, Anpassungen und Änderungen geben.

Damit jeder der Forumleser etwas davon hat, werden wir zum Abschluss den kommentierten Quelltext hier veröffentlichen. Die Tabellenstruktur ist hier (leider) nur beschreibend darzustellen.

Es wird ein wenig dauern, aber heute noch werden.

Freundliche Grüße von der Insel - Mario