Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1400to1404
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Abfrage für Zusammenführung von Tabellen

VBA Abfrage für Zusammenführung von Tabellen
08.01.2015 12:28:41
Tabellen
Hallo zusammen,
meine VBA Kenntnisse sind mehr als Mangelhaft, aber ich befinde mich derzeit auf dem aufsteigenden Ast ;) Trotzdem habe ich derzeit schon eine Anfrage auf Arbeit, die ich hoffentlich mit eurer Hilfe bewältigen kann.
Zur Situation:
Ich habe mehrere Quelldateien, die auf mehreren Arbeitsblättern die gleiche Datenstruktur enthalten. Derzeit muss ich über copy&paste die Infos in der Zieldatei konsolidieren. Das würde ich gerne durch eine Abfrage automatisieren.
3 Kniffe sind noch zu erwähnen. Zum einen ist die Anzahl der Arbeitsblätter nicht immer bekannt und es steht auf dem letzten Blatt keine wichtige Info und daher soll das nicht kopiert werden. Zum anderen ist es ein automatisierter Download und beginnt nicht in Zeile 1.
Diese Daten sollen final in eine neue Datei kopiert werden.
Kann mir hier jemand helfen?
Vielen Dank!

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Musterdatei?
08.01.2015 13:01:09
Klaus
Hallo Marcus,
kein Problem, das schreibe ich (und viele anderen) in 15 Minuten. Aber was hilft dir das, wenn du es nicht auf deine Masterdatei umsetzen kannst?
Vorschlag: Lade ein paar Muster hoch, dann können wir das direkt an deinen Bedürfnisse anpassen! Sensible Daten ersetzt du bitte durch "Max Mustermann" und Zufallszahlen.
Wichtig: die Struktur der Muster-Quelldateien soll exakt deinen echten Quelldateien entsprechen. Bitte mindestens zwei Dateien mit unterschiedlicher Anzahl Arbeitsblätter, einem unwichtigem letztem Arbeitsblatt und unterschiedlichen Anfangszeilen! 2-3 Zeilen Daten pro Blatt reichen ja.
Eine weitere Musterdatei, deine Zieldatei, in der EXAKT zu erkennen ist wo die konsolidierten Daten hin sollen - alle untereinander in die gleiche Tabelle, oder jede in ein eigenes Arbeitsblatt?
Grüße,
Klaus M.vdT.

Anzeige
AW: Musterdatei?
08.01.2015 13:19:05
Marcus
Hallo Klaus,
vielen Dank für die schnelle Antwort. Ich habe mal drei Dateien fertig gemacht und hochgeladen.
Zieldatei:
https://www.herber.de/bbs/user/94836.xlsx
Inputdateien:
https://www.herber.de/bbs/user/94837.xls
https://www.herber.de/bbs/user/94838.xls
Dabei ist wie gesagt zu beachten, dass die Inputdateien unterschiedlich viele Tabs haben können und dass der Reiter Report2 nicht benötigt wird.
Wie man hoffentlich sehen kann, ist die Zieldatei von der Struktur wie die Inputdateien aufgebaut. Dazu noch eine Frage...wenn ich Formeln im gleichen Arbeitsblatt einstellen möchte, würden die dann während der Konsolidierung erhalten bleiben oder überschrieben?
Danke!

Anzeige
AW: Musterdatei?
08.01.2015 13:56:59
Klaus
Bitte sehr:
https://www.herber.de/bbs/user/94841.xlsm
(Die Inputdateien lade ich nicht neu hoch)
Müsste eigentlich selbsterklärend sein, die Pfad- und Datei-Namen direkt in der Datei anpassen. Hast du mehr als zwei Dateien, einfach die Liste weiter führen, es geht auch mit 9999 Dateien noch!
Der Code ist etwas umständlich, weil ich einen vorhandenen Datei-Updater von vor 2 Jahren von mir genommen und entschlackt habe, und an einer Stelle ganz Quick-And-Dirty die Anpassung für deine Inputdateien reingewürgt sind. Bei Fragen gerne fragen!
Grüße,
Klaus M.vdT.

Anzeige
AW: Musterdatei?
08.01.2015 14:35:52
Marcus
Hi Klaus,
vielen Dank! Eine Sache noch. Ich habe das jetzt mit den originalen Daten getestet und komischerweise fügt er die Daten ab Zeile 1 ein, d.h. das ich in den Zeilen 3 Leerzeilen stehen habe und der Begriff Report vorkommt...
Kannst du hier helfen?
Danke!

Fehler muss in den Input-Dateien liegen
08.01.2015 14:41:58
Klaus
Hallo Marcus,
ich vermute, das liegt an der "Input"-Datei. Mit den zum testen zur Verfügung gestellten Dateien geht es 1A. Ich vermute, einer deiner Input-Dateien hat eine andere Überschriftenstruktur bei der meine Logik, den Kopierbereich zu greifen, nicht zieht.
Bitte identifiziere die betreffende Input-Datei und lade sie hoch, dann schau ich mir das nochmal an.
Grüße,
Klaus M.vdT.

Anzeige
AW: Fehler muss in den Input-Dateien liegen
08.01.2015 15:18:15
Marcus
Ahh ich hab das Übel indentifiziert glaube ich. Folgende Situation:
Wenn eine Datei mehr als einen Reiter mit Daten enthält,entfällt auf den weiteren Reitern die Überschrift...und dein Makro wird so gebaut sein,dass es diese simuliert...oder?

AW: Fehler muss in den Input-Dateien liegen
08.01.2015 15:55:21
Klaus
Hier holt sich das Makro den "Kopierbereich". Schlechter Stil, da auf die schnelle hingeschustert, aber egal :-) Die Logik ist ja auch sehr speziell an deine Bedürfnisse angepasst. Viel Einfacher wäre es, wenn jeder Report immer in der gleichen Zeile anfängt - aber das bekommst du nicht durch, oder?

Dim lRow As Long
Dim fRow As Long
With ActiveSheet
lRow = .Cells(.Rows.Count, 2).End(xlUp).Row
fRow = .Cells(lRow, 2).End(xlUp).Row
If fRow > 1 Then fRow = fRow + 1
.Range(.Cells(lRow, 2), .Cells(fRow, 14)).Copy
End With
lRow = .Cells(.Rows.Count, 2).End(xlUp).Row
lRow = "last", letzte Zeile. Dafür geht das Makro in Zelle B65536 und tippt "STRG+up", kannst du gerne nachmachen. Es landet in einer Zeile, zum Beispiel in Zeile 12. Es merkt sich jetzt: Die letzte Zeile des Kopierbereichs ist Zeile 12
fRow = .Cells(lRow, 2).End(xlUp).Row
fRow = "first", erste Zeile. Das Makro geht in die Zelle B* wobei * die letzte Zeile ist die es bereits ermittelt hat und tippt "STRG+up". Damit landet es zum Beispiel in Zeile 4, wo die Überschriften stehen.
If fRow > 1 Then fRow = fRow + 1
Wenn wir in Zeile 1 landen, hat dieses Blatt keine Überschriften - das lässt fRow also auf 1 stehen. Landet es in einer Zeile ausser Zeile 1, dann gab es Überschriften in diesem Blatt.
Da die Überschriften nicht jedesmal mit kopiert werden sollen, merkt es sich stattdessen eine Zeile weiter unten, also Zeile 5 (daher das +1)
.Range(.Cells(lRow, 2), .Cells(fRow, 14)).Copy
Jetzt wird der Bereich B5:N14 kopiert
In deiner Input-Musterdatei mit 5 Reitern im ersten Blatt "Report 1" kannst du das ja mal ausprobieren. Kopiere folgendes Testmakro in die Datei und lasse es laufen, schau dir an welcher Bereich selektiert wurde:

Sub SelectionTestMakro()
Dim lRow As Long
Dim fRow As Long
With ActiveSheet
lRow = .Cells(.Rows.Count, 2).End(xlUp).Row
fRow = .Cells(lRow, 2).End(xlUp).Row
If fRow > 1 Then fRow = fRow + 1
.Range(.Cells(lRow, 2), .Cells(fRow, 14)).SELECT
End With
End Sub

Jetzt schreibe in B2 "Hallo" und in B3 "Welt" und lasse das Testmakro nochmal laufen. Du siehst, wie der ausgewählte Bereich falsch wird!
Identifiziere die Quelldatei, welche zu einer falschen Selektion führt und lade sie mir hoch, dann passe ich das nochmal an. Wenn du eine eindeutige Regel hast, ab welcher Zeile es anfängt, baue ich die ein. Mein Vorschlag in Pseudocode:
- steht etwas in Zelle N1?
- wenn ja, dann markiere von der ersten bis zur letzten Zeile
- wenn nein, dann ist es ein Blatt mit Überschriften. In dem Fall:
- Suche die Buchstabenkomination "PLZ" in der gesamten Spalte N und merke dir die zugehörige Zeile
- markiere ab eins unter "PLZ" bis zum Listenende
so etwas kann aber nur funktionieren, wenn ausnahmslos immer "PLZ" als Überschrift in Spalte N steht - und niemals "Postzeitzahl" oder "PLZ_" oder " PLZ" oder sonst ein Unsinn.
Welche Regel nutzbar ist kannst nur du wissen, denn nur du kennst alle Inputdateien und deren Regeln!
Grüße,
Klaus M.vdT.

Anzeige
AW: Musterdatei?
08.01.2015 16:20:48
Marcus
Hi Klaus,
anbei die Datei so wie sie aus dem System kommt. Wie gesagt die Anzahl der Reiter hängt von der Menge der Daten ab. Aber genau so sieht jede Datei aus.
https://www.herber.de/bbs/user/94846.xls
Danke

Versuch:
09.01.2015 08:05:12
Klaus
Hi Markus,
such mal in meinem Makro diesen Teil:

With ActiveSheet
lRow = .Cells(.Rows.Count, 2).End(xlUp).Row
fRow = .Cells(lRow, 11).End(xlUp).Row
If fRow > 1 Then fRow = fRow + 1
.Range(.Cells(lRow, 2), .Cells(fRow, 14)).Copy
End With
Und ändere da die Zeile
fRow = .Cells(lRow, 2).End(xlUp).Row
auf
fRow = .Cells(lRow, 11).End(xlUp).Row
und teste nochmal. Mit deiner neu hochgeladenen Musterdatei lässt sich der Fehler nicht reproduzieren - ich vermute immer noch Überschriften in Spalte B (=2). Daher habe ich jetzt statt B einfach irgendeine andere Spalte angenommen (K = 11). Das könnte den mini-Bug schon auflösen.
Falls nicht, musst du forschen welche Inputdatei genau den Fehler erzeugt und mir diese zur Verfügung stellen!
Grüße,
Klaus M.vdT.

Anzeige
AW: Versuch:
09.01.2015 09:32:54
Marcus
Morgen Klaus,
also zwei Probleme. Zum einen hilft die Veränderung im Makro leider nicht den Fehler zu beheben und zum anderen habe ich jetzt erstmals versucht das Makro auf alle drei Dateien anzuwenden. Mit dem Ergebnis:
1. Datei (nur ein Sheet) läuft perfekt
2. Datei (zwei Sheets) hat das beschriebene Überschriftenproblem
3. Datei (5 Sheets) findet er gar nicht und sagt mir immer einen Fehler im Dateipfad,der aber sicher nicht ist,da sich die Datei im gleichen Verzeichnis wie die anderen befindet.
Ich versuche mal ein wenig rum und melde mich dann im Laufe des Tages noch mal :)
Danke schon mal.

Anzeige
und? schon Erfolge? owT.
12.01.2015 08:03:06
Klaus
.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige