online 1
gast (50)

/ Forum / Tabellenkalkulation

TabellenkalkulationTabellenkalkulation

Fragevon Sir_Knut vom 30.03.2019, 15:55 Options

Zusammenkopieren mehrerer Excel Dateien in eine Datei

Hallo zusammen,

da mir die Suchfunktion leider nicht das gebracht hat was ich brauche und ich ein ziemlicher VBA Noob bin, nehmts mir bitte nicht übel dass ich das Problem konkret auf mich beziehe .-)


Folgendes Scenario

In einem Ordner befinden sich mehrere Excel-Dateien (Anzahl variiert),
diese Dateien bestehen aus einem Arbeitsblatt mit M Spalten und einer unterschiedlichen Anzahl Zeilen (wobei die erste Zeile die Überschrift ist und die 2. eine Leerzeile, dies ist bei allen Dateien gleich).

Ziel ist es nun:

Alle (nicht leeren) Zeilen der Excel dateien in einer einzigen zusammenzufassen,
also Stückliste1+Stückliste2+ ... = Gesamtstückliste, wobei nach Möglichkeit die ersten beiden Teilen nicht berücksichtigt werden sollen, da die ja immer gleich sind und keine Nutzdaten enthalten.


Es wäre echt nett, wenn mir da ein VBA Profi helfen könnte :-)

Gruss

Stefan L.


Antwort schreiben

Antwort 1 von Beverly vom 31.03.2019, 08:47 Options

Hi Stefan,

versuche es mal mit diesem Code, der ab Zeile 2 den gesamten benutzten Bereich jeder Tabelle kopiert

Sub zusammenfuegen()
    Dim strDateiname As String
    Dim loLetzte1 As Long
    Dim loLetzte2 As Long
    Dim inLetzte As Integer
    Application.ScreenUpdating = False
    strDateiname = Dir(ThisWorkbook.Path & "\*.xls")
    With ThisWorkbook.Worksheets("Tabelle1")
        Do While strDateiname <> ""
            If strDateiname <> ThisWorkbook.Name Then
                Workbooks.Open Filename:=ThisWorkbook.Path & "\" & strDateiname
                loLetzte1 = .UsedRange.SpecialCells(xlCellTypeLastCell).Row
                loLetzte2 = ActiveWorkbook.ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
                inLetzte = ActiveWorkbook.ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
                ActiveWorkbook.ActiveSheet.Range(Cells(3, 1), Cells(loLetzte2, inLetzte)).Copy Destination:=.Cells(loLetzte1 + 1, 1)
                ActiveWorkbook.Close True
            End If
            strDateiname = Dir
        Loop
    End With
    Application.ScreenUpdating = True
End Sub


Es wird davon ausgegangen, dass sich die Arbeitsmappe mit dem Code im selben Verzeichnis wie die auszulesenden Arbeitsmappen befindet. Lässt sich natürlich auch z.B. auf einen fest vorgegebenen Pfad ändern.

Bis später,
Karin

Antwort 2 von nighty vom 31.03.2019, 17:32 Options

hi Beverly :-)

na ich dann auch noch :-))

lady first heisst es ja :-)))

gruss nighty

liest aus geschlossenen dateien

vom zielverzeichnis ausgehend werden alle sheets von allen gefundenen dateien mit dem angegebenen bereich ausgelesen

pfad natuerlich entsprechen anzupassen

Option Explicit
Sub makro01()
Dim tabellen As Integer
Dim Dateien As Integer
Dim DateiName As String
Dim zelle As Range
With Application.FileSearch
.NewSearch
.LookIn = "C:\test3"
.SearchSubFolders = False
.Filename = "*.*"
If .Execute() > 0 Then
Cells(1, 1) = ""
For Dateien = 1 To .FoundFiles.Count
For tabellen = 1 To Sheets.Count
For Each zelle In Range("A1,A2")
Cells(1, 1) = Cells(1, 1) + ExecuteExcel4Macro("'C:\test3\" & "[" & _
Mid(.FoundFiles(Dateien), Len(.LookIn) + 2, Len(.FoundFiles(Dateien))) & "]" & _
Sheets(tabellen).Name & "'!" & zelle.Address(, , xlR1C1))
Next zelle
Next tabellen
Next Dateien
End If
End With
End Sub

Antwort 3 von Beverly vom 01.04.2019, 09:21 Options

Hi nighty,

Stefan schreibt, dass die Zeilenanzahl unterschiedlich sein kann. Bei deinem Code wird jedoch von Anfang an vorausgesetzt, dass eine festgelegte Anzahl an Zeilen übernommen wird. Ich habe aus Stefans Frage auch nicht unbedingt entnommen, dass er die Ergebnisse summieren möchte. Ist es da nicht sinnvoller, erst einmal alle Daten aus den anderen Mappen in eine zu bringen und diese dann hinterher entsprechend den Erfordernissen zu bearbeiten? Gut, mit meinem Code werden die Arbeitsmappen im Hintergrund geöffnet und anschließend wieder geschlossen, aber davon bekommt der User ja nichts mit. Und dann ist der Code wesentlich schneller, weil ja nicht jede Zeile einzeln ausgelesen wird, sondern der komplette benutzte Bereich auf einen Ritt kopiert wird. Ich habe den benutzten Bereich verwendet, da mir nicht ganz klar ist, was Stefan mit "M Spalten" gemeint hat. Wenn SpalteM gemeint ist, lässt sich der Code ja problemlos anpassen.

Unere Codes berücksichtigen allerdings beide nicht, dass Stefan alle Zeilen ohne Leerzeilen übernehmen will. Aber dazu könnte man nach dem Übertragen noch diesen Code ausführen lassen, mit dem dann in der zusammenfassenden Tabelle alle Leerzeilen gelöscht werden

Sub Leerzeilen_loeschen()
    ' alle Leerzeilen löschen, dabei alle Leerzeilen auf eine Variable schreiben und alles mit einmal löschen
    ' Code von Hajo Ziplies
    Dim LoI As Long
    Dim RaZeile As Range
    For LoI = 1 To ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
        If Application.WorksheetFunction.CountA(Rows(LoI)) <> ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column Then
            If Rows(LoI).SpecialCells(xlCellTypeBlanks).Count = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column Then
                If RaZeile Is Nothing Then
                    Set RaZeile = Rows(LoI)
                Else
                    Set RaZeile = Union(RaZeile, Rows(LoI))
                End If
            End If
        End If
    Next LoI
    If Not RaZeile Is Nothing Then RaZeile.Delete  ' hier werden alle Leerzeilen auf einmal gelöscht
    Set RaZeile = Nothing
End Sub


Bis später,
Karin

Antwort 4 von Sir_Knut vom 01.04.2019, 11:19 Options

Hallo zusammen,

erst mal vielen Dank für die Hilfe, in der Tat haben wir momentan nur die Spalten A-M aber wenn der Code so flexibel ist, dass er das automatisch mitbekommt, um so besser .-)

Aufsummieren sollte Excel da um Gottes willen bloß nix, sondern einfach nur die Zeilen untereinander kopieren, wir werden da später entsprechende Filter darüberlegen, das reicht dann schon aus :-)

Werde das Ganze morgen mal ausprobieren, komme heute nicht dazu, da ich nen Server migrieren muss...

Grüsse

Stefan

Antwort 5 von nighty vom 01.04.2019, 15:05 Options

hi Beverly :-)

stimmt auf jedefall, ich benutz den code auch nur um kleine datenmengen zu holen :-))

gruss nighty

Ähnliche Themen

mehrere Excel dateien zu einer
Excel2003  03.05.2007 - 402 Hits - 3 Antworten

Aus Mehren Excel- Dateien Daten in eine Excel Datei einlesen
Jona1982  26.07.2007 - 1074 Hits - 13 Antworten

Excel Datei nicht per E-Mail versenden
Sp33d  26.09.2007 - 47 Hits - 2 Antworten

aktualisierung mehrerer dateien
kuxo  11.06.2008 - 38 Hits - 1 Antwort

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026