Mehre Excel Dateien zusammenfügen

Maex

Maex

Aktives Mitglied
Thread Starter
Dabei seit
19.07.2006
Beiträge
619
Reaktionspunkte
74
Hallo zusammen!

Ich habe einen Ordner, dort drin sind etwa 34 Excel Dateien.

Gibt es eine Möglichkeit diese zusammenzuführen? Der Aufbau der Dateien ist immer gleich: Die Zeilen 1-4 als Kopf, der Rest mit Daten (immer gleich strukturiert). Im Idealfall würde der Kopf nicht mitkopiert werden.
Ist das sehr umständlich?

Die Dateien sind wie folgt benannt:
results.xls
results(page_2).xls
results(page_3).xls
...

Dankeschön schon mal im Voraus.

Maex
 
"Etwa 34" ... :D

Automatisch gibt's da leider nichts.
Man könnte sich sicherlich etwas mit Automator oder, je nach Excel-Version, Makros basteln - aber bei den "nur" 34 Files geht Copy-Paste unter dem Strich schneller. :)
 
Ich habe etwa 34 geschrieben, da dies öfter angewandt werden muss. Es sind also nicht nur 1x 34 Dateien, sondern mehrmals (evtl. 20x pro Monat). Dadurch ist die Copy and Paste Lösung leider nicht ideal.
 
Kannst du mal 2 Files hochladen? Würde es um einiges erleichtern.
 
Was wird dann leichter? :kopfkratz:
Ich kann mir sehr gut Tabellen mit "Überschrift" und Datenzeilen vorstellen, davon etwa 34 Stück, von denen ich EINE Überschrift und alle Datenzeilen behalten will.
Ob die Spalten nun "A, B, C" oder "Dings, Bums, Trallala" heißen ist aus meiner Sicht für die Problemlösung ebenso unerheblich wie die Anzahl der Datenzeilen. :noplan:

Ich lasse mich aber gerne von Argumenten überzeugen. :nervi:
 
Im Endeffekt werde ich wohl leider nicht um ein Makro drumrum kommen. Davon habe ich auch schon einige im Internet gefunden, allerdings schaffe ich es nicht, diese auf meinem Mac anzuwenden.
 
Du könntest uns mal Deine Excel-Version verraten, Makros sind nicht in allen Versionen vorhanden. :)
 
Excel'11, neueste Version. Also die, welche Makros kann. Sonst hätte ich auch leider keinen Mac nutzen können. Ich bin auch nicht total unerfahren mit Markos, nur dieses bekomme ich nicht hin. Die Makros aus der Windows Welt konnte ich soweit bei diesem Fall nicht umschreiben. :(
 
Ich besitze kein Excel, kann die Daten daher nur mit Libreoffice anschauen, und kenne mich auch mit Excel und Libreoffice nicht aus, aber mit Mathematica ist dein Wunsch ziemlich einfach umzusetzen (solange es dir nur um die Daten geht, denn das Logo und den Header habe ich einfach mal entfernt).
Mit Mathematica einfach mal die ".xls" Datei importieren (wir schränken die "Elements" auf "Data" ein, dann wird schonmal das Logo usw. weggelassen). Dann erhält man im Grunde eine Liste, die die einzelnen Zeilen (das sind wieder Listen) der Excel-Datei als Elemente enthält. Bei der ersten Datei speichert man hiervon alle Elemente ab dem Vierten (einschließlich) unter einer neuen Variable ab, bei der zweiten (und jeder folgenden Datei) speichert man alle Elemente ab dem Fünften (einschließlich) ab. Die Liste fügt man dann in eine Liste zusammen (in der richtigen Reihenfolge) und schon hat man eine Liste, die als erstes Elemente die Spaltenbezeichnungen beinhalten, gefolgt von allen Datensätzen. Diese Liste kann man dann als xls-Datei exportieren. Dabei geht die Formatierung verloren, aber der Inhalt stimmt.

Edit: Kann man sicherlich einfach mit anderer (günstigerer) Software nachbauen, ist ja schließlich nicht besonders kompliziert.
 
Wie falkgottschalk der alte Fuchs schon eingangs geschrieben hat, würde ich bei so einer geringen Anzahl von Blättern auch die copy und paste Methode wählen.
Ich weiß ja nicht ob die einzelnen Blätter immer "nur" 19 Zeilen beinhaltet, aber als zusätzlichen Tipp kann ich noch folgendes anbieten (soweit dir das nicht eh schon bekannt ist)
Erste Zelle markieren und dann "Shift"+"CTRL" und Pfeil nach rechts und Pfeil nach unten.
Damit markierst du dann alle mit Inhalt gefüllten Zellen ohne lange zu scrollen.
Vielleicht reicht dir das schon als Erleichterung
 
Danke schon mal für eure Überlegungen. Aber Copy & Paste ist leider keine Lösung. Ich sollte das pro Monat mit 15 Firmen und je etwa 34 Sheets machen. Also 476 mal pro Monat, oder auch 5712 pro Jahr.
Da ich am Firmenrechner sitze kann ich auch nicht wirklich beliebig Programme installieren. Die einzige Lösung bis jetzt wäre es, wenn ich mich an einen Windows Rechner setzte und das dort mit Makros mache.

Es sollte doch aber auch eine Lösung mit Makros mit Mac geben. Kann ja nicht sein, dass ich meine Chefs davon überzeugt habe mir einen Mac zu kaufen um dann vor der Windows Kiste zu sitzen :)
 
Ok, das ist ne Menge. Außerdem wollen wir natürlich nicht, dass du zurück an die DOSE musst.

Hier mal ein erster Ansatz aus dem "office-loesung" Forum:
Sub Konsolidierung()
'Konsolidierung ohne Überschriften ( Zeile 1 )
Dim Wks As Worksheet
Dim Bereich As Range
Dim strLC As String
Dim i As Integer

Set Wks = Worksheets.Add
Wks.Name = "Konsolidierung"

For i = 2 To Worksheets.Count
With Worksheets(i).UsedRange
strLC = .Cells(.Rows.Count, .Columns.Count).Address
Set Bereich = .Range("A2:" & strLC)
Bereich.Copy Destination:= _
Wks.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
End With
Next i
End Sub

Du musst nur noch die einzelnen Tabellenblätter in einer Datei vorher zusammenbringen, alle Blätter in deiner Mappe markieren und das Makro starten. Ich habe das gerade bei mir ausprobiert und es funktioniert. (Excel 2011)
 
  • Gefällt mir
Reaktionen: Maex
Keine Ahnung ob das machbar ist, aber wenn man aus den Exceldateien (vielleicht gibt es da ja schon einen passenden Konverter?) Textdateien (CVS-Dateien) erstellen könnte, kann man diese einfach über das Terminal (bzw. per Shell-Skript) aneinaderreihen (also den Inhalt nacheinander in eine neue Textdatei schreiben lassen). Vorher kann man natürlich noch die Header-Zeilen weglassen, sodass man danach eine CVS-Datei mit allen Datensätzen hat, die man dann wiederum in Excel importieren könnte (den Import von CVS-Dateien sollte Excel beherrschen).
Das ganze kann man dann sicher auch als Shell-Skript verpacken, sodass das Ausführen des Skriptes reicht, um die nötige CVS-Datei zu erstellen. Den Import müsste man dann vermutlich noch manuell machen (oder es gibt auch dafür einen Konverter).
 
  • Gefällt mir
Reaktionen: macmarx und Maex
Danke an die letzten beiden Beiträge, die gehen auf jeden Fall schon mal in die richtige Richtung

Du musst nur noch die einzelnen Tabellenblätter in einer Datei vorher zusammenbringen, alle Blätter in deiner Mappe markieren und das Makro starten. Ich habe das gerade bei mir ausprobiert und es funktioniert. (Excel 2011)

Das ist das einzige, dass stört. Es gibt die Möglichkeit alle Excel Sheets aus einem Ordner zusammenzufügen. Daran scheitere ich aber. Hier ist mal ein Beispiel aus einem Windows Forum:

Public Sub prcKopieren()
Dim intFilecount As Integer
Dim strFileName As String
Dim objSheet As Worksheet
Application.ScreenUpdating = False
Set objSheet = ThisWorkbook.Worksheets("Gesamtübersicht")
With Application.FileSearch
.NewSearch
.LookIn = "C:\temp"
.FileType = msoFileTypeExcelWorkbooks
.Execute
For intFilecount = 1 To .FoundFiles.Count
strFileName = Dir$(.FoundFiles.Item(intFilecount))
GetObject (.FoundFiles.Item(intFilecount))
With Workbooks(strFileName).Worksheets(1)
.Range(.Cells(2, 1), .Cells(.Cells(.Rows.Count, _
1).End(xlUp).Row + 1, 20)).Copy _
objSheet.Cells(objSheet.Rows.Count, 1). _
End(xlUp).Offset(1, 0)
End With
Workbooks(strFileName).Close SaveChanges:=False
Next
End With
With Application
.CutCopyMode = False
.ScreenUpdating = True
End With
End Sub

@Sagittarius A Ich könnte die Dateien auch prinzipiell als CVS importieren, wie würde denn so ein Shell-Skript aussehen?
 
Das Skript ist eigentlich sehr simpel. Also, ich gehe mal davon aus, dass die Dateien analog zu den *.xls Dateien benannt sind. D.h. aus results.xls hast du results.csv, aus results(page_2).xls hast du results(page_2).csv erstellt usw. Du brauchst jetzt eigentlich nur zwei Befehle, und zwar den Befehl sed und den Befehl cat. Mit dem Befehl sed kann man unter anderem Zeilen löschen, mit dem Befehl cat kann man Dateien zusammenfügen. Das Löschen der Zeilen 2 bis 5 in der Datei Name.csv erledigt beispielsweise folgender Befehl:

Code:
sed "2,5d" Name.csv > Name.tmp

Dabei wird das Ergebnis in der Datei Name.tmp gespeichert. Mit "cat *.tmp > ergebnis.csv" (ohne "") kann man alle Dateien, die die Extension tmp haben aneinanderreihen und als ergebnis.csv abspeichern. Folgendes Skript kann man beispielsweise als Datei "skript.sh" speichern, was es macht steht drunter:

Code:
#!/bin/bash

sed "1,2d" result.csv > result.tmp

for i in ./result\(*\).csv
do
sed "1,3d" $i > "$(basename -s .csv $i).tmp"
done

cat result.tmp result\(*\).tmp > ergebnis.csv
rm *.tmp

Wenn man also im Terminal dieses Skript durch die Eingabe von "sh /Pfad/zum/Skript.sh" aufruft, passiert folgendes: Im aktuellen Verzeichnis wird bei der Datei result.csv die ersten beiden Zeilen entfernt und das Ergebnis als result.tmp gespeichert. Danach wird bei jeder Datei mit dem Namen result(*).csv (wobei * durch einen beliebigen String ersetzt werden kann) die ersten drei Zeilen gelöscht und das Ergebnis unter gleichen Namen nur mit der Extension tmp abgespeichert. Danach werden dann die Dateien in der richtigen Reihenfolge aneinandergereiht und als ergebnis.csv gespeichert. Zum Schluss werden noch alle Dateien mit der Extension im Verzeichnis gelöscht (um aufzuräumen).
Anmerkungen: Die ursprünglichen csv-Dateien werden nicht geändert, man kann das Skript also gefahrlos häufiger durchlaufen lassen ohne dass sich das Ergebnis ändert.
Vor dem Ausführen des Skripts muss man mit cd in das Verzeichnis mit den csv-Dateien wechseln, man kann das Skript aber auch anpassen, damit man ihm beim Aufruf das Verzeichnis als Parameter übergeben kann, aber das ist Geschmackssache. Wie viele Zeilen bei den einzelnen Dateien entfernt werden müssen, musst du selbst noch bestimmen und die entsprechenden Code-Zeilen dann manuell anpassen.

Du brauchst jetzt also nur noch einen Konverter, der dir aus den Excel-Dateien die csv-Dateien generieren kann. Am besten wäre natürlich ein Konverter, den man auch über das Terminal/Shell-Skripte verwenden kann, weil man dann die nötigen Aufrufe des Konverters einfach in dieses Skript mit einbauen kann.
 
  • Gefällt mir
Reaktionen: Maex
Das ist super Sagittarius A! Konverter brauch ich gar nicht, da ich die Dateien auch direkt als CSV abrufen kann. Nur Schade das es nicht mit Excel geht.
Aber Daumen hoch für deine ausführliche Hilfe!
 
Keine Ahnung ob das machbar ist, aber wenn man aus den Exceldateien (vielleicht gibt es da ja schon einen passenden Konverter?) Textdateien (CVS-Dateien) erstellen könnte, kann man diese einfach über das Terminal (bzw. per Shell-Skript) aneinaderreihen (also den Inhalt nacheinander in eine neue Textdatei schreiben lassen). Vorher kann man natürlich noch die Header-Zeilen weglassen, sodass man danach eine CVS-Datei mit allen Datensätzen hat, die man dann wiederum in Excel importieren könnte (den Import von CVS-Dateien sollte Excel beherrschen).
Das ganze kann man dann sicher auch als Shell-Skript verpacken, sodass das Ausführen des Skriptes reicht, um die nötige CVS-Datei zu erstellen. Den Import müsste man dann vermutlich noch manuell machen (oder es gibt auch dafür einen Konverter).

Wäre auch meine Lösung gewesen: erst in ein Textformat (CSV) umwandeln, dann per "cat" unter Terminal o.ä. mergen und dann in EXCEL öffnen. Dabei nur die erste Datei mit Überschriften, den Rest ohne. Fertig!
 
Zurück
Oben Unten