Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Excel 2002 - Werte von vielen Excel-Dateien in eine Datei kopieren - Makro?





Frage

Hallo, hoffentlich kann mir jemand helfen, meine sog. "Excel-Profis" sind gescheitert: ich habe in einem Datei-Ordner alle Verträge einzeln, mit fortlaufender Nummerierung gespeichert. In jeder einzelnen Datei befindet sich z.B. in Zelle A9 ein Name, in Zelle A10 die Straße und in Zelle A11 die PLZ mit Ort. Nun möchte ich ein Makro haben, das mir: 1. in die erste Excel-Datei (z.B. Vertrag1) geht 2. die Werte von Zelle A9, A10, A11 makiert 3. die Datei (z.B. AlleAdressen.xls) öffnet 4. den Wert aus A9 in Zeile A2 kopiert 5. den Wert aus A10 in Zeile B2 kopiert 6. den Wert aus A11 in Zeile C2 kopiert 7. die Datei Vertrag1 schließt 8. die nächste Datei Vertrag2 öffnet 9. Schritt 2-3 durchführt 10. den Wert aus A9 in Zeile A3 kopiert 11. den Wert aus A10 in Zeile B3 kopiert 12. den Wert aus A11 in Zeile C3 kopiert (also immer in die nächste fortlaufende Zeile). 13. usw. bis das Makro die letzte Datei erreicht hat (ca. 500 Stück) 14. fertig und glücklich! Geht so was? Über hilfreiche Infos, Tips und Hilfen (Makro) würde ich mich sehr freuen. Viele Grüße echtjetzt

Antwort 1 von nostalgiker6

Wenn die Dateien, aus denen die Werte kopiert werden sollen, wirklich "systematische" Namen haben (Vertrag1.xls, Vertrag2.xls ...), dann würde ich einfach in die zu füllenden Felder der Adressdatei Formeln schreiben wie:
=Vertrag1$A$9
=Vertrag1$A$10
=Vertrag1$A$11

und diese Formeln über alle 500 Zeilen herunterziehen. Danach müsste nur noch die 1 von Vertrag1 in den Zeilen "hochgezählt" werden (das geht ja leider nicht automatisch beim Ziehen):
Notfalls manuell - sicher besser per Macro.

Antwort 2 von coros

Hallo echtjetzt,

Deine Frage ist schon super gestellt, so dass kaum Fragen entstehen. Aber eben nur kaum. Du hättest noch schreiben sollen, wie die Tabellenblätter heißen, aus denen, bzw. in die Daten kopiert werden sollen. Ich bin mal von dem Blattnamen "Tabelle1" ausgegangen. Kopiere nachfolgendes Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche.

Option Explicit

Sub Daten_kopieren()
Dim Pfad As String, Dateiname As String, iRow As Long
Application.ScreenUpdating = False
Pfad = "C:\Eigene Dateien\"
Dateiname = Dir(Pfad & "*.xls")
Do While Dateiname <> ""
Workbooks.Open Filename:=Pfad & Dateiname
iRow = ThisWorkbook.Sheets("Tabelle1").Range("A65536").End(xlUp).Offset(1, 0).Row
Workbooks(Dateiname).Sheets("Tabelle1").Range("A9").Copy
ThisWorkbook.Sheets("Tabelle1").Cells(iRow, 1).PasteSpecial
Workbooks(Dateiname).Sheets("Tabelle1").Range("A10").Copy
ThisWorkbook.Sheets("Tabelle1").Cells(iRow, 2).PasteSpecial
Workbooks(Dateiname).Sheets("Tabelle1").Range("A11").Copy
ThisWorkbook.Sheets("Tabelle1").Cells(iRow, 3).PasteSpecial
Workbooks(Dateiname).Close
Dateiname = Dir()
Loop
End Sub


Bei dem Makro werden alle Exceldateien in dem Verzeichnis "C:\Eigene Dateien" geöffnet, die Zellen aus Blatt "Tabelle1" A9:A11 ausgelesen und in das Blatt "Tabelle1" in der Datei, aus dem das Makro gestartet wurde, in die erste freie Zeile in die Spalte A, B und C kopiert. Das Makro muss in der Zeile

Pfad = "C:\Eigene Dateien\"


angepasst werden. Dort muss der Pfad der auszulesenden Dateien eingetragen werden. Außerdem muss unter Umständen auch der Blattname angepasst werden.

Ich hoffe, Du kommst klar. Bei Fragen melde Dich bitte.

Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 3 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 3 von echtjetzt

Hallo,

vielen Dank für die schnellen und super Tips.

Oliver´s Beschreibung hat mir am allerbesten geholfen, weil (wie ich leider nicht beschrieben) die Datei-Namen nicht fortlaufend durchnummeriert sind, sondern variieren können.

Habe es eben laut seiner super VBA gemacht, auch mit Hilfe seiner HP, und hat gleich so funktioniert, wie ich es mir vorgestellt habe.

Auch die weiteren Anleitungen und Hilfestellung auf Oliver´s HP sind leicht verständlich und sehr nützlich.

Vielen, vielen Dank für Eure Hilfe.

Gruß
Christian

Antwort 4 von Sereyanne

Hi,
funktioniert so was auch wenn sich die Namen nicht systematisch sind?
Freue mich auf Antwort....

Antwort 5 von coros

Hallo,

was meinst Du mit

Zitat:
wenn sich die Namen nicht systematisch sind


Erkläre es mal genauer. Bei meiner Lösung aus AW2 sind die Dateinamen egal, weil alle Exceldateien in dem Verzeichnis geöffnet und ausgelesen werden. Siehe dazu auch die Erklärung unter dem Makro in AW2.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 6 von Sereyanne

Achso. Dann entschuldige bitte. Ist das erste Mal, dass ich Excel zu programmieren versuche.
Aber vielen Dank für die sehr schnelle Antwort! (Ist ja doch schon länger her, der Thread hier.)

Antwort 7 von coros

Hallo,

ist ja kein Problem und entschuldigen musst Du Dich auch nicht, wenn Du eine Frage stellst. Nur fürs nächste Mal solltest Du einiges beherzigen. Du solltest Dein Problem so genau wie möglich schildern. Außerdem sind Bereichsangaben für eine Hilfe enorm wichtig, denn Du kennst Deine Datei, wir alle hier nicht. Eventuell ist es Dir ja möglich, eine Beispieldatei z.B. bei http://www.file-upload.net/ ]hochzuladen und den Link, den Du erhältst, uns hier mitzuteilen. Die enthaltenen Daten können ruhig Dummy-Daten sein. Das hilft meist enorm viel weiter.

Außerdem wäre es schön, wenn Du ein Hallo am Anfang und ein Gruß am Ende schreiben würdest. Denn das würde Deinen Beitrag gleich viel netter aussehen lassen. Wenn Du zum Bäcker gehst sagst Du ja auch beim Reingehen "Guten Tag" und beim Gehen "Auf Wiedersehen". Denn die Leute, an die Du Deine Frage richtest, sitzen zwar am PC, sind aber dennoch Menschen.

Wenn Du noch mehr über das Schreiben eines möglichst richtigen Beitrags lesen möchtest, dann schau Dir doch mal diese Anleitung von @Mickey an.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 8 von Sereyanne

Hi,
also ein "Hallo" hatte ich doch geschrieben... ansonsten war meine Frage so kurz, weil ich im Stress bin und der Threadstarter es ziemlich genau so erklärt hat, wie es auch mein Problem ist.
Ich bin ja noch nicht mal zum Ausprobieren gekommen... einfach noch keine Zeit gehabt.
Danke für den Upload-Link.
Schön dass man hier so hilfreiche Antworten bekommt, und dann auch noch so schnell, und dann auch noch auf so ein altes Thema!
Danke & Bis später
Sereyanne

Antwort 9 von Sereyanne

Hi,
da ich meinen Beitrag anscheinend nicht editieren kann, muss ich noch einen schreiben.

@coros: Deine Antwort war klasse! Hat mir sehr geholfen!!

Aber ein Problem habe ich noch: Ich will die Daten nicht in das erste freie Feld kopieren, sondern erst ab A7 kommen die Felder, wo die Daten reinkopiert werden sollen. Sonst hat alles prima geklappt!!!! Könntest du mir da nochmal helfen?

Gruß Sereyanne

Antwort 10 von coros

Hallo Sereyanne,

das sollte mit nachfolgendem Code funktionieren.

Option Explicit

Sub Daten_kopieren()
Dim Pfad As String, Dateiname As String, iRow As Long
Application.ScreenUpdating = False
Pfad = "C:\Eigene Dateien\"
Dateiname = Dir(Pfad & "*.xls")
Do While Dateiname <> ""
    Workbooks.Open Filename:=Pfad & Dateiname
    iRow = ThisWorkbook.Sheets("Tabelle1").Range("A65536").End(xlUp).Offset(1, 0).Row
    If iRow < 7 Then iRow = 7
    Workbooks(Dateiname).Sheets("Tabelle1").Range("A9").Copy
        ThisWorkbook.Sheets("Tabelle1").Cells(iRow, 1).PasteSpecial
    Workbooks(Dateiname).Sheets("Tabelle1").Range("A10").Copy
        ThisWorkbook.Sheets("Tabelle1").Cells(iRow, 2).PasteSpecial
    Workbooks(Dateiname).Sheets("Tabelle1").Range("A11").Copy
        ThisWorkbook.Sheets("Tabelle1").Cells(iRow, 3).PasteSpecial
    Workbooks(Dateiname).Close
    Dateiname = Dir()
Loop
End Sub


MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 11 von Sereyanne

Hallo,
wow, vielen Dank. Bin noch gar nicht zum Testen gekommen, mach ich aber noch.
Ich habe aber noch ein weiteres Problem: Eine Zelle der Quelldateien enthält eine Wenn-Formel. Mit deinem Makro wird alles prima übernommen, dafür werden meine Zellformatierungen wieder umgeschrieben. Das Problem ist aber, wenn das Makro die Zelle mit der Wenn-Formel kopieren will, dann steht in der neuen Mappe nur #Bezug! Wie kann ich nur den errechneten Inhalt kopieren, ohne dass sich Excel um die Formel kümmert?
Gruß Sereyanne

Antwort 12 von coros

Hallo ,

ändere überall im Makro dort, wo

.PasteSpecial
steht in

.PasteSpecial Paste:=xlPasteValues

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 13 von Sereyanne

Hi,
alles klar, vielen herzlichen Dank!!!
Gruß Sereyanne

Antwort 14 von coros

Hallo,

gerne geschehen. Danke auch für die Rückmeldung.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.