Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
296to300
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
296to300
296to300
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Arbeitsblätter zusammenführen - mit oder ohne VBA

Arbeitsblätter zusammenführen - mit oder ohne VBA
22.08.2003 14:15:24
Karl-Heinz
Hallo Gemeinde,
auf Anraten von WernerB (danke nochmal) hier nochmal ein neuer Thread zu meinem Problem:
Ich habe insgesamt 42 Exceldateien, die, was den Spalten und Zellenaufbau betreffen (Format und Bezeichnungen) absolut identisch sind. Nur die Inhalte sind unterschiedlich.
Ich möchte nun alle 42 Exceldateien in einer neuen zusammenfassen, in der dann alle untereinander stehen und anschließend von mir weiterbearbeitet werden können.
Ich könnte natürlich eine neue Datei öffnen und mit kopieren und einfügen jeweils alle einzelnen Dateien untereinander einkopieren. Da war meine Idee, ob es nicht einen eleganteren Weg gibt (ähnlich wie in Word, wo ich ja auch die Seiten verschiedener Dokumente in einem Worddokument zusammenfassen kann), diese Einzeldateien einfach untereinander in eine einzige schreiben zu lassen.
Wenn alle Stricke reissen, muss ich halt eben mit kopieren und einfügen arbeiten.
Aber vielleicht gibt es ja eine elegantere Möglichkeit.
Im voraus besten Dank! Ein Super-Forum......
Karl-Heinz

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Arbeitsblätter zusammenführen - mit oder ohne VBA
22.08.2003 15:47:03
ChrisL
Hi Karl-Heinz
Vielleicht kannst du es mit normalen Dateiverknüpfungen machen...
=[Mappe1]Blatt1!$A$1
=[Mappe2]Blatt1!$A$1
=[Mappe3]Blatt1!$A$1
etc.
Vermutlich aber auch nicht besonders elegant.
Wenn sich alle Dateien in einem separaten Verzeichnis befinden, oder wenn es im Dateinamen eine klare Erkennung gibt, dann kann man den Kopiervorgang automatisch mit Makro machen... d.h. ratter ratter und fertig ;-) Dazu müsste man dann aber auch den genauen Kopierbereich kennen.
Gruss
Chris

Danke an ChrisL
22.08.2003 16:37:38
Karl-Heinz
Danke für die Hilfe.
Ich habe halt gedacht, es gäbe über ein Makro die Möglichkeit, eine neue Tabelle mit den 42 Tabellen aus den anderen Excel-Dateien nacheinander zu füllen.
Mein erster Gedanke war:
1. nehme die Tabelle 1 aus Exceldatei 1
2. schreibe sie in die neue Tabelle
3. ermittle die Position der letzten nicht leeren Zeile
4. kopiere dorthin die Tabelle 1 aus Exceldatei 2
5. ermittle die Position der letzten nicht leeren Zeile
6 ....... bis zur 42. Datei
Da ich VBA nicht beherrsche, hab ich auf ein Lösung auf diese Art und Weise gehofft.
Macht aber nichts, werde halt die einzelnen Tabellen untereinander reinkopieren.
Trotzdem vielen Dank.
Gruß Karl-Heinz

Anzeige
AW: Danke an ChrisL
22.08.2003 16:52:38
ChrisL
Hi Karl-Heinz
Bitte ;-)
Teil 2 meiner Antwort war eigentlich als Angebot ein solches Makro zu schreiben gedacht. Aber eben, man müsste noch ein bischen mehr wissen.
Dateierkennung, Bereich?
Gruss
Chris

ChrisL : Dein Hilfsangebot
22.08.2003 17:57:13
Karl-Heinz
Hallo Chris,
ich bin einfach geplättet über Dein Hilfeangebot. Soweit habe ich gar nicht gedacht. Wo bekommt man schon in der heutigen Zeit und in dieser Welt noch solche selbstlosen Hilfen (ist ernst gemeint, kein Scherz).
Ich kann Dir natürlich aus Datenschutzgründen nicht die Tabelle mit gefüllten Datensätzen zur Verfügung stellen.
Aber vielleicht hilft ja der Aufbau der Spalten.
In dieser Form habe ich zig Exceldateien vorliegen, die alle den Namen nach folgendem Muster haben:
VD Name.xls.
Die hierin abgelegten Laschen habe ebenfalls die gleiche Bezeichnung (Betreuer-Namensdubletten)
Nun soll mit Hilfe eines Makros, wie in meinem letzten Beitrag beschrieben, die Inhalte der anderen Tabellen jeweils in einer einzigen unter dem jeweils letzten Datensatz angehängt werden.
Hilft Dir dies weiter?
siehe angehängte Exceltabelle. Ich habe noch nie einen Anhang hochgeladen. Hoffentlich klappt das so. Die Datei heisst: 685.xls
Vorab nochmals vielen Dank! Wenn´s so nicht geht ist auch nicht schlimm.

Anzeige
AW: ChrisL : Dein Hilfsangebot
22.08.2003 19:17:36
ChrisL
Hi Karl-Heinz
Hmmm inzwischen bin ich zu hause und habe darum meine Beispieldateien nicht zur Hand. Könnte den Code zwar auch sonst zusammen kratzen, aber wenn es nicht eilt, werde ich die Sache am Dienstag erst machen (Montag ist hier Feiertag).
Sind die Dateien VD ... xls alle im selben Verzeichnis oder wenigstens alle im gleichen Laufwerk? Gibt es da auch noch andere Excel-Dateien oder nur diese?
Gruss
Chris

AW: ChrisL : Dein Hilfsangebot
25.08.2003 10:04:26
Karl-Heinz
Hallo Chris,
ja, die Dateien sind alle in einem separaten Ordner auf dem gleichen Laufwerk (Pfad: C:\Rückläufe\). Es gibt auch keine weiteren Dateien.
Wenn ich das Makro sehe, kann ich dieses entsprechend anpassen. Kann zwar selber nicht programmieren, verstehe aber etwas diese Makrosprache. Brauche halt eben nur Anhaltspunkte, wie solch eine Prozedur aussehen könnte.
Wäre einfach toll.
Noch einen schönen Feiertag und vorab vielen Dank!
Karl-Heinz

Anzeige
AW: ChrisL : Dein Hilfsangebot
26.08.2003 12:22:31
ChrisL
Hi Karl-Heinz
So müsste es gehen...
Option Explicit

Sub KarlHeinz()
Dim sFile As String, sPath As String
Dim WB1 As Workbook, WB2 As Workbook
Dim WS1 As Worksheet, WS2 As Worksheet
Dim LetzteZeile1 As Long, LetzteZeile2 As Long
Application.ScreenUpdating = False
Set WB1 = ThisWorkbook
Set WS1 = WB1.ActiveSheet
sPath = InputBox("Bitte Pfad eingeben: ", "Dateipfad", "C:\Test")
If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
sFile = Dir(sPath & "*.xls")
Do While sFile <> ""
Workbooks.Open sPath & sFile
Set WB2 = Workbooks(sFile)
Set WS2 = WB2.Worksheets(1)
LetzteZeile1 = Right(Right(WS1.UsedRange.Address, Len(WS1.UsedRange.Address) - _
InStr(WS1.UsedRange.Address, ":") - 1), Len(Right(WS1.UsedRange.Address, _
Len(WS1.UsedRange.Address) - InStr(WS1.UsedRange.Address, ":") - 1)) - _
InStr(Right(WS1.UsedRange.Address, Len(WS1.UsedRange.Address) - _
InStr(WS1.UsedRange.Address, ":") - 1), "$"))
LetzteZeile2 = Right(Right(WS2.UsedRange.Address, Len(WS2.UsedRange.Address) - _
InStr(WS2.UsedRange.Address, ":") - 1), Len(Right(WS2.UsedRange.Address, _
Len(WS2.UsedRange.Address) - InStr(WS2.UsedRange.Address, ":") - 1)) - _
InStr(Right(WS2.UsedRange.Address, Len(WS2.UsedRange.Address) - _
InStr(WS2.UsedRange.Address, ":") - 1), "$"))
WS2.Range("A2:AH" & LetzteZeile2).Copy _
WS1.Cells(LetzteZeile1 + 1, 1)
WB2.Close False
sFile = Dir()
Loop
Application.ScreenUpdating = True
End Sub

Gruss
Chris

Anzeige
AW: ChrisL : Dein Hilfsangebot
26.08.2003 13:41:54
Karl-Heinz
Hallo Chris,
habe Dein Makro mal ausprobiert. Kam am Ende aber immer nur eine leere Tabelle raus.
Ich habe dann mal schrittweise getestet.
Das Makro öffnet die erste Datei im Verzeichnis und läuft alles durch.
Beim Abarbeiten des Befehles "WB2.Close False" wird die Tabelle wieder geleert.
Beim Befehl "sFile = Dir()" verschwinden dann auch das Gitter.
Dann kommt der Loop. Danach beginnt die Prozedur mit der nächsten Datei von vorne.
Ich lade Dir mal 3 Dummydateien hoch.
https://www.herber.de/bbs/user/728.xls

Die Datei https://www.herber.de/bbs/user/729.xls wurde aus Datenschutzgründen gelöscht

Die Datei https://www.herber.de/bbs/user/730.xls wurde aus Datenschutzgründen gelöscht

Hier kannst Du schrittweise das Ganze nachvollziehen. Vielleicht ist es ja nur noch eine Kleinigkeit.
Trotrdem, mach Dir nicht zu viel Arbeit. Ich habe bereits ein schlechtes Gewissen.
Vielen Dank
Gruß Karl-Heinz

Anzeige
AW: ChrisL : Dein Hilfsangebot
26.08.2003 14:17:01
ChrisL
Hi Karl-Heinz
Scheint tatsächlich nur eine Kleinigkeit zu sein.
Wenn du das hier als Test ausführst...

Sub test()
MsgBox ActiveSheet.UsedRange.Address
End Sub

... wirst du feststellen, dass der Tabellenbereich bis Zeile 98 geht, weshalb er die Daten in Zeile 99 kopiert etc.
Lösche mal die Zeilen 11 - 100 (nicht Inhalt sondern Zeilen), und versuch es erneut.
Gruss
Chris

AW: ChrisL : Dein Hilfsangebot
26.08.2003 14:49:50
Karl-Heinz
Hallo Chris,
habe getestet, bekam die Meldung $A$1:$AH$98, habe Zeilen gelöscht, habe nochmal getestet. Dann wurde mir nur noch der mit Daten gefüllte Bereich angezeigt.
Habe dann das Makro gestartet und hatte anschließend wieder eine leere Datei.
Hat dies denn bei Dir mit den drei Testdateien funktioniert? Ich kann es mir nicht erklären.
Gruß Karl-Heinz

Anzeige
AW: ChrisL : Dein Hilfsangebot
26.08.2003 15:12:23
ChrisL
Hi Karl-Heinz
Ja bei mir hat es funktioniert. Den 'Beweis' könnte ich bringen in dem ich die fertige Datei anfüge, aber das würde wohl auch nicht weiter helfen.
Es wird jeweils der Bereich aus Blatt 1 der jeweiligen Datei kopiert. Kann es sein, dass du noch weitere Blätter in den Dateien hast.
Vielleicht mal so testen...

Sub KarlHeinz()
Dim sFile As String, sPath As String
Dim WB1 As Workbook, WB2 As Workbook
Dim WS1 As Worksheet, WS2 As Worksheet
Dim LetzteZeile1 As Long, LetzteZeile2 As Long
Application.ScreenUpdating = False
Set WB1 = ThisWorkbook
Set WS1 = WB1.ActiveSheet
sPath = InputBox("Bitte Pfad eingeben: ", "Dateipfad", "C:\Test")
If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
sFile = Dir(sPath & "*.xls")
Do While sFile <> ""
Workbooks.Open sPath & sFile
Set WB2 = Workbooks(sFile)
Set WS2 = WB2.Worksheets(1)
LetzteZeile1 = Right(Right(WS1.UsedRange.Address, Len(WS1.UsedRange.Address) - _
InStr(WS1.UsedRange.Address, ":") - 1), Len(Right(WS1.UsedRange.Address, _
Len(WS1.UsedRange.Address) - InStr(WS1.UsedRange.Address, ":") - 1)) - _
InStr(Right(WS1.UsedRange.Address, Len(WS1.UsedRange.Address) - _
InStr(WS1.UsedRange.Address, ":") - 1), "$"))
LetzteZeile2 = Right(Right(WS2.UsedRange.Address, Len(WS2.UsedRange.Address) - _
InStr(WS2.UsedRange.Address, ":") - 1), Len(Right(WS2.UsedRange.Address, _
Len(WS2.UsedRange.Address) - InStr(WS2.UsedRange.Address, ":") - 1)) - _
InStr(Right(WS2.UsedRange.Address, Len(WS2.UsedRange.Address) - _
InStr(WS2.UsedRange.Address, ":") - 1), "$"))
WS2.Range("A2:AH" & LetzteZeile2).Select
End
' Müsste den Tabellenbereich der ersten Datei markieren.
WB2.Close False
sFile = Dir()
Loop
End Sub

Gruss
Chris

Anzeige
AW: ChrisL : Dein Hilfsangebot
26.08.2003 17:05:47
Karl-Heinz
Hallo Chris,
leider keine Änderung. Was mir auffällt: Wenn das Makro abgearbeitet ist, hat er wieder die Zeilen bis 98 schwarz markiert (also offenbar leere Zeilen reinkopiert und als Bereich markiert). Ich habe keine Idee, woran das liegt, zumal ich die Dir übersandten Testdateien verwendet habe. Auch ein erneutes Löschen der Zeilen hat nichts gebracht.
Ich glaube, das Problem ist so leider nicht zu lösen. Werde dann wohl manuell reinkopieren.
Auf jeden Fall tausend Dank für die Unterstützung. Vielleicht liegt es ja an irgendeiner Einstellung in unserer Excel-Version. Weitere Blätter sind in der Arbeitsmappe nicht angelegt.
Wie dem auch sei, nochmals vielen Dank!
Karl-Heinz

Anzeige
AW: ChrisL : Dein Hilfsangebot
27.08.2003 10:39:27
ChrisL
Hi Karl-Heinz
Schade, dass es nicht funktioniert hat. Ist halt leider sehr schwierig eine 'Ferndiagnose' zu stellen.
Nichts für Ungut und eine gute Woche
Chris

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige