Excel VBA Makro Sammeltabelle erstellen

Mitglied: Rio1980

Rio1980 (Level 1) - Jetzt verbinden

01.09.2011 um 17:07 Uhr, 6977 Aufrufe, 14 Kommentare

Hallo zusammen,

ich stehe vor einem für meine Begriffe hochkomplexen Makroproblem.:-) face-smile Das Makro soll Daten aus unzähligen txt-Dateien importieren, daraus eine Sammeltabelle erstellen und nach bestimmten Suchkriterien aus dieser erstellen Sammeltabelle Übereinstimmungen in 3 anderen Dateien suchen, um aus diesen weitere Daten in die erstellte Sammeltabelle (natürlich an die richtigen Positionen) zu kopieren.

In einem Ordner "Textdateien" auf der C: Platte befinden sich unzählige Unterordner wobei sich in jedem dieser Ordner unter anderem auch eine txt-Datei befindet. All dieser txt-Dateien ähneln sich im Aufbau, sodass nach dem importieren (als Spaltentrennung soll ein : gelten) einer txt-Datei in Excel (2003) die Zellen A1 - B25 mit Daten gefüllt sind. Ich benötige dann die Daten aus den Zellen B1, B2, B4, B5, B6, B7 und B11 welche in meine Sammeltabelle in die Spalten A-G (für jede txt-Datei eine Zeile, sind im mom ca 100 Unterordner und somit 100 txt-Dateien und werden immer mehr) übernommen werden sollen. Wenn all diese Daten in die nun neu entstandene Sammeltabelle aufgenommen sind, müssten sich in der Spalte B nun Teilernummern befinden. Nach diesen Teilernummern müsste das Makro nun in 3 weiteren im sich im Aufbau ähnlichen Dateien, (z. Bsp.: "Datei1","Datei2","Datei3") wobei sich die Teilenummer immer in der Spalte A befindet, suchen und bei einem Treffer die Daten aus den Zellen B - H der entsprechenden Datei und Trefferzeile in meine Sammeltabelle in die Spalten H - N in die entsprechende Zeile kopieren.

Ich hoffe ich konnte das Problem bzw die Anforderung an das Makro anschaulich genug schildern...ist nicht immer so leicht ohne Anschauungsmaterial. :-) face-smile
Die Frage für mich ist, ob das per Makro überhaupt lösbar ist und ob es sich alles in einem einzigen Makro verwirklichen lässt, oder ob man das in 2 Makros verpacken müsste. Für eure Hilfe und über eure Anregungen würde ich mich sehr freuen.

Bis dahin verbleibe ich mit vielen Grüßen
Rio
Mitglied: Biber
01.09.2011 um 17:46 Uhr
Moin Rio1980,

Die Frage für mich ist, ob das per Makro überhaupt lösbar ist und ob es sich alles in einem einzigen Makro verwirklichen lässt, oder ob man das in 2 Makros verpacken müsste

Ich sach' mal so:
Für mich ist noch gar nicht die Phase erreicht, in der ich mir zutrauen würde zu sagen
"Nimm einen 10er Ringschlüssel und einen Kreuzschlitzschraubendreher mit Bambusgriff, der Rest ergibt sich dann von allein."

Ein, zwei Punkte an dem Gesamtplan würde ich gern noch mal etwas trennschärfer formuliert haben wollen,
i.e. von "unzähligen" Unterordnern und unzähligen Input-Textdateien wissen wir ja jetzt, aber
  • die Zieldimensionen sind EINE Exceltabelle mit EINEM Sheet ??
  • oder mit einem Sheet pro Importiere-mir-alle-Daten-Lauf?
  • oder ein Excelsheet pro Woche?
  • Ist es eine einmalige oder einer regelmäßige Aktion, passiert es täglich, stündlich oder immer zur Grammy-Verleihung?
  • Soll, muss oder darf der Import manuell gestartet werden oder jeden Freitag mittag automatisch?
  • WTAF sind denn die "bestimmten Kriterien", nach denen da irgendwas zusammengeharkt werden soll? Stehen die auch in einer CSV-Datei oder "weiss" das Makro diese Kriterien oder gibt der/die UserIn dat ein?

Diese Rahmenparameter wären für mich schon wesentlich, ehe ich mich auf die Suche nach dem richtigen Werkzeug oder Schnitzmesser mache.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
01.09.2011 um 18:32 Uhr
Hallo Rio1980 und Biber!

Um mal zu sehen, ob ich einige Antworten auf Bibers Fragen erraten habe, ein [Edit] erweiterter [/Edit] Versuch, die vorgegebenen Daten einzulesen:
Hinsichtlich "Datei1" bis "Datei3" wurde unterstellt, dass
  • es sich ebenfalls um Textdateien mit dem Trennzeichen ":" handelt
  • diese Dateien alle gleich strukturiert sind (Weshalb werden die Daten nicht gleich in einer Datei zusammengefasst?)
  • Überschneidungen der Teilenummern (eine Nummer kommt in mehreren Dateien vor) erkannt werden müssen (Was dann zu geschehen hätte, wäre noch zu klären)

Grüße
bastla

[Edit] "Nachschlagen" in den Dateien "Datei1" bis "Datei3" sowie Löschen (alter Daten) der Zieltabelle hinzugefügt [/Edit]
Bitte warten ..
Mitglied: Biber
01.09.2011 um 21:13 Uhr
[OT] @bastla

Natürlich kenne ich auch die Situation, dass ich beim Heimkommen einen Zettel auf dem Küchentisch vorfinde mit den Worten:
"Zutaten für's Abendessen liegen im Kühlschrank. Fang ruhig schon mal an zu Kochen. Bin zum Essen wieder da."

...und im Kühlschrank liegen dann ein paar Fischfilets, ein halbes Glas Brombeermarmelade, 2 Becher Quark, 4 Stangen Rhabarber und der Rest einer Tube Gleitcreme.

Sollte ich wirklich mit diesen Infos schon anfangen und mache ich damit wirklich allen Beteiligten eine Freude?

Grüße
Biber
[/OT]
Bitte warten ..
Mitglied: bastla
01.09.2011 um 21:27 Uhr
[OT] @Biber
Also Dir traue ich durchaus zu, daraus etwas Interessantes zu kreieren - und Du doch auch ... ;-) face-wink

... und wenn der Rhabarber schon mal da ist ...

Grüße
bastla
[/OT]
Bitte warten ..
Mitglied: Biber
01.09.2011 um 21:41 Uhr
[OT ii] @bastla

Ich sach' ma so...

Natürlich gibt es erstmal Pluspunkte, wenn pünktlich etwas Warmes auf dem Tisch steht.
Jedenfalls eigentlich immer.

Aber ich sehe dennoch ein gewisses Restrisiko.... ;-) face-wink

Und überhaupt: zu den drei Dingen, bei denen Zeit nun wirklich keinerlei Rolle spielt, gehört für mich auch das Kochen.
Heisst ja nicht, dass ich deshalb etwas anbrennen lasse.

Grüße
Biber
[/OT ii]
Bitte warten ..
Mitglied: Rio1980
01.09.2011 um 23:09 Uhr
@Biber

Danke schon mal im Voraus dass du dir die Sache angesehen hast.
Ja, das Ziel soll EINE Sammeldatei und EIN Sheet sein...immerhin reden wir hier nach dem aussieben der Daten nur noch von 14 Spalten und ein paar hundert Zeilen, sollte machbar sein denke ich.
Es ist mit sicherheit eine Aktion die noch mehrfach durchgeführt wird, aber ein zeitlicher Abstand ist noch nicht ersichtlich, auch wenn ich schon mal sagen kann, dass es sicher nicht wöchentlich sein wird, sondern schon mehr Zeit ins Land gehen wird und ich somit auf luxeriöse und sicher aufwenidge Abfrage über schon erfasste Daten bei erneuter Durchführung des Makros auf Grund der ohenhin vorhandenen Komplexität verzichtet habe. Da das dann nicht regelmäßig gemacht wird werde ich den Import auch manuell nach Bedarf starten. Das Suchkriterium ist wie bereits weiter unten im ursprünglichen Text erklärt die Teilenummer.

@ Bastla

WOW! Auch wenn ich dass Makro erst Morgen auf der Arbeit testen kann, sieht es schon mal sehr gut aus und entspricht was das Einlesen der Textdateien angeht meinen Vorstellungen. Was die Dateien 1-3 angeht sind diese ganz normale excel Dateien und es sind drei an der Zahl, da drei verschiedene Mitarbeiter von verschiedenen PC´s aus parallel Daten editieren müssen.:-( face-sad Im übrigen ist der Aufbau der Dateien identisch und doppelt oder dreifach vorhandene Teilenummern pro Datei und dateiübergreifend sind nicht vorhanden.

[OT]
Im übrigen finde ich euren Disput sehr erheiternd ;-) face-wink
[/OT]

Viele Grüße
Rio
Bitte warten ..
Mitglied: bastla
01.09.2011 um 23:45 Uhr
Hallo Rio1980!

Die folgende Version holt die "Nachschlage"-Daten aus den Excel-Dateien "Datei1.xls" - "Datei3.xls"
Geschrieben wird, wie auch in der ersten Fassung, in die aktuelle Tabelle der Datei, welche das Makro enthält - und natürlich ist auch das hier produzierte Ergebnis statisch (wird also nur durch neuerliches Ausführen des Makros verändert).

Grüße
bastla

[Edit] Löschen der bereits vorhandenen (alten) Daten des Zieltabellenblattes verbessert [Edit]
Bitte warten ..
Mitglied: Rio1980
05.09.2011 um 11:02 Uhr
Hallo bastla!

Vielen Dank für die Mühe! Das importieren der Daten aus den Textdateien klappt super! :-) face-smile
Allerdings erscheint beim durchführen des Makros ziemlich oft (vermutlich so oft wie Zeilen in meiner generierten Sammeldatei existieren) die Meldung " ist bereits vorhanden!" und nachdem das Makro durchgelaufen ist habe ich zwar eine wunderschöne Sammlung der Daten aus den Textdateien, aber die DAten aus den Exceldateien 1 - 3 sind nicht gefunden....bzw nicht übernommen worden.

Viele Grüße
Rio
Bitte warten ..
Mitglied: bastla
05.09.2011 um 12:38 Uhr
Hallo Rio1980!
Allerdings erscheint beim durchführen des Makros ziemlich oft (vermutlich so oft wie Zeilen in meiner generierten Sammeldatei existieren)
Die Meldung betrifft nur das Einlesen der Daten aus "Datei1.xls" - "Datei3.xls" und hat mit den Daten aus den Textdateien nix zu tun ...
die Meldung " ist bereits vorhanden!"
Die Meldung sollte auch eine Teilenummer ausgeben ...

Sinn der gesamten Aktion: In den Zeilen 25 bis 43 wird aus den Daten der xls-Dateien ein "Dictionary" aufgebaut - dieses besteht aus Datensätzen mit einem Schlüssel (der Teilenummer) und dem zugehörigen Wert (den weiteren Werten aus der Zeile als Array) und existiert nur zur Laufzeit im Arbeitsspeicher. Der Schlüssel muss dabei einmalig sein, daher wird zunächst geprüft, ob er bereits existiert, und wenn ja, die angesprochene Meldung erzeugt.
Zum Testen kannst Du im VBA-Editor den Cursor zwischen "Sub Importieren()" und "End Sub" platzieren und dann mit der Taste F8 in Einzelschritten durch den Ablauf gehen. Dabei kannst Du jederzeit (zB wenn eben die angesprochene Meldung ausgegeben wurde) den Mauszeiger über einer Variablen im Code (zB "Schl" platzieren und Dir damit deren Wert anzeigen lassen.

Eine Anmerkung noch: Da ich nicht weiß, welche Tabellen es in Deinen xls-Dateien gibt, wird jeweils auf die erste dieser Tabellen zugegriffen - siehe dazu Zeile 27. Diese Zeile könntest Du auf
ändern, damit die Tabelle "Blattname" ausgelesen wird.

Grüße
bastla
Bitte warten ..
Mitglied: Rio1980
12.09.2011 um 11:34 Uhr
Hallo Bastla!

Die Meldung betrifft nur das Einlesen der Daten aus "Datei1.xls" - "Datei3.xls" und hat mit den Daten aus den
Textdateien nix zu tun ...

Leider hat sich das Problem aufgetan, dass die Teile-Nr in den Exceldateien doch wiederholt vorkommen kann, was auch leider nicht abzuändern ist :-( face-sad
Ich habe das Makro in der Version durchlaufen lassen und versucht die Zeilen 34 und 35 wegzulassen, aber das importeiren der Daten aus den Datei1.xls" - "Datei3.xls klappt leider nicht. Der Unterschied ist natürlich nur, dass die Msg-Box nicht mehr erscheint und das Makro dann Meldungen durchläuft. Die Dateien werden im Hintergrund zwar geöffnet und er arbeitet auch ne weile damit, aber am Ende kommt "nur" eine Auflistung der importierten Daten aus den Textdateien ohne die Daten aus den Exceldateien 1-3. Für mich sieht es so aus dass das "Dictionary" aus den Exceldateien aufgebaut wird, aber der Abgleich zwischen der erzeugten Tabelle aus den Textdateien und dem "Dictionary" hinkt.

Was die Anzahl der Tabellen in den Exceldateien angeht, sind da zwar mehrere vorhanden, aber ich benötige nur die Daten aus Tabelle1, somit muss die Zeile 27 nicht abgeändert werden.

Viele Grüße
Rio
Bitte warten ..
Mitglied: bastla
12.09.2011 um 16:53 Uhr
Hallo Rio1980!

Das Redundanz-Problem ist eigentlich auch eine andere Baustelle - die Zeilen 34 und 35 kannst Du also weglassen (es wird dann eben - kommentarlos - immer mit den ersten gefundenen Daten gearbeitet).
Wenn der Tabellenname immer "Tabelle1" lautet, würde ich diesen trotzdem in Zeile 27 verwenden ("Tabelle1" muss nicht immer das erste Blatt der Mappe sein).
Da das Script bei meinen Tests den gewünschten Erfolg gebracht hat, ist es schwer, den Grund für den Fehler mit Deinen Daten nachzuvollziehen - vielleicht noch als Hinweis zur Fehlersuche:
Setze auf die Zeile 61 einen Breakpoint (vor der Zeile in die graue Spalte klicken - es wird dann ein roter Punkt angezeigt) und die Ausführung hält an dieser Stelle an; dann kannst Du, wie oben beschrieben, durch Zeigen (ohne Klicken) mit der Maus auf eine Variable deren Wert anzeigen lassen - insbes die Variable "Schl" aus Zeile 60 wäre hier interessant. Danach kannst Du mit F8 in Einzelschritten weiter gehen, oder mit F5 den Ablauf wieder starten (bis zum nächsten Breakpoint oder bis zum Ende).

Grüße
bastla
Bitte warten ..
Mitglied: Rio1980
16.09.2011 um 15:41 Uhr
Hallo Bastla!

Ein wiederholtes Danke für deine Bemühungen mir zu helfen!
Deine Anregungen habe ich so weit alle durchprobiert. Die Zeile 27 ist abgeändert und ich habe probiert dem Fehler durch manuelles Durchlaufen des Makros auf die Spur zu kommen. Der Einfachheit halber habe ich EINE einzige DUMMY Exceldatei erstellt in der nur eine Zeile mit Daten enthalten ist, wobei der Schlüssel (Schl = Teilenummer) mit der Teilenummer aus der ersten Zeile der generierten Sammeldatei identisch ist. Beim durchlaufen der Zeilen 1 - 43 wird somit im "Dictionary" nur ein einziger Schlüssel erstellt und die dazugehörigen Daten müssten eingelesen werden. Beim weiteren durchlaufen des Makros wird dann beim ersten Durchlauf der Schleife (Zeile 50 - 68) der "Schl" in Zeile 60 korrekt erkannt und müsste mit dem "Schl" aus dem "Dictionary" identisch sein. Bei der Prüfung in Zeile 61 wird aber anscheinend keine Übereinstimmung gefunden, da direkt in die Zeile 64 gesprungen wird. Es sieht also so aus das der "Schl" zwar identisch ist, aber die Zeilen 62 - 63 nicht abgearbeitet werden...
Hast du evtl noch eine Idee? Die Teilenummern sehen wie folgt aus, falls das irgendeine Rolle spielt: 12345678-01

Viele Grüße
Rio
Bitte warten ..
Mitglied: bastla
16.09.2011 um 15:53 Uhr
Hallo Rio1980!
Es sieht also so aus das der "Schl" zwar identisch ist
... was es auch würde, wenn im einen Fall am Ende ein Leerzeichen stünde, im anderen nicht - versuch es daher mit folgender Zeile 60:
Grüße
bastla
Bitte warten ..
Mitglied: Rio1980
20.09.2011 um 02:02 Uhr
Hallo Bastla!

Das wars wohl gewesen! Das Makro läuft jetzt durch und findet jetzt Übereinstimmungen zu den "Schlüsseln" und kopiert die entsprechendenDaten in die Sammeldatei.Somit steht schon mal fest, dass das Makro nun funktioniert. Allerdings sind die Daten nicht vollständig was die Anzahl der übereinstimmenden "Schlüssel" angeht...werde wohl schauen müssen wo es noch Unterschiede (Schreibweise, Leerschritte etc) geben kann. Vielen Dank! :-) face-smile

Viele Grüße
Rio
Bitte warten ..
Heiß diskutierte Inhalte
LAN, WAN, Wireless
Mikrotik CAP AC als Wlan Bridge
theoberlinVor 1 TagFrageLAN, WAN, Wireless28 Kommentare

Hallo zusammen, ich habe mal wieder ein kleines Problem. Folge Idee: 5Ghz Modul des CAP AC wird als Client in ein WLAN eingebunden(Station). 2.4 ...

Windows 10
PDF automatisch auf zwei Drucker aufteilen
hannes.pVor 1 TagFrageWindows 109 Kommentare

Hallo zusammen, ich suche verzweifelt nach einer Möglichkeit, ein von einer Web-Anwendung generiertes PDF automatisch auf zwei Drucker drucken zu lassen. Das PDF Dokument ...

Microsoft
Erwerb von M365 Lizenzen, Partner Autorisierung für Azure AD - Globaler Administrator wirklich nötig?
NidavellirVor 1 TagFrageMicrosoft4 Kommentare

Hi zusammen, bitte entschuldigt den etwas sperrigen Titel, aber ein knapperer wollte mir nicht einfallen. :D Wir wollen bei einem Systemhaus M365 Lizenzen (Business ...

Windows 10
Sperrbildschirm nach 5 min
ZeppelinVor 1 TagFrageWindows 1012 Kommentare

Hallo zusammen, ich wende mich mit meinem anliegen an euch weil ich mit meinen Möglichkeiten am Ende bin. Wenn innerhalb von 5 min. keine ...

Speicherkarten
Welchen USB Stick für Bootstick?
gelöst dlnkrgVor 1 TagFrageSpeicherkarten6 Kommentare

Hallo, Ich bin auf der Suche nach USB - Sticks, auf denen ich Linux Ubuntu installieren kann und praktisch als Festplatte für das Betriebssystem ...

Off Topic
BKA und der Bundestrojaner
brammerVor 1 TagInformationOff Topic3 Kommentare

Hallo, habe kurz überlegt ob das unter Off Topic allgemein oder Off Topic LOL gehört brammer

Sicherheit
Emails als Nur Text
Jessica98Vor 1 TagFrageSicherheit4 Kommentare

Hallo zusammen, macht es Sinn E-Mails als nur Text einzustellen, um sich vor schädlichen HTML-Code zu schützen? Meines Erachtens wird ein Benutzer diese Email ...

Windows Netzwerk
Sporadisch kein Netz auf mehreren Win10-Maschinen
SolarflareVor 14 StundenFrageWindows Netzwerk6 Kommentare

Hallo, ich habe seit Monaten einen eigenartigen Effekt in unserem Windows-Netz. Windows-Domäne mit ca. 100 Maschinen, alle Clients aktuelles Windows 10. Die Maschinen hängen ...