thepinky
Goto Top

Excel Power Query, einzelne Tabellenblätter in neuer Arbeitsmappe zusammenführen

Hallo zusammen,

befasse mich aktuell mit den Möglichkeiten von Power Query.

In einem Ordner werden täglich neue Excel Arbeitsmappen gespeichert. Diese rufe ich ab und speichere sie in einer Zieldatei.

Soweit so gut, jetzt zu meinem Problem.

Die Quelldateien haben mehrere Arbeitsblätter, diese möchte ich in der Zieldatei in einem Arbeitblatt zusammenfassen.
Wie funktioniert das?

Außerdem führt es zu Problemen, wenn andere Excel Arbeitsmappen in dem Quellordner gespeichert werden. Gibt ed eine möglcihkeit, dass nur auf Mappen mit einem definierten Namen + täglich aktualisierten Datum zugegriffen wird?

Danke.

Content-ID: 62898429015

Url: https://administrator.de/en/excel-power-query-einzelne-tabellenblaetter-in-neuer-arbeitsmappe-zusammenfuehren-62898429015.html

Ausgedruckt am: 25.12.2024 um 19:12 Uhr

7907292512
7907292512 01.09.2023 aktualisiert um 15:24:56 Uhr
Goto Top
ußerdem führt es zu Problemen, wenn andere Excel Arbeitsmappen in dem Quellordner gespeichert werden. Gibt ed eine möglcihkeit, dass nur auf Mappen mit einem definierten Namen + täglich aktualisierten Datum zugegriffen wird?
Das wirst du dann wohl mit VBA arbeiten müssen. Kann ich dir anbieten wenn du das alles etwas genauer spezifizierst.
ca. 20 Zeilen VBA werden da vermutlich reichen.

Habe dir einmal ein Beispiel zusammengebaut, das anhand eines Dateifilters und des heutigen Datums die Inhalte aller enthaltenen Sheets in die Mappe des Makros kopiert:
Sub ArbeitsmappenZusammenfassen()
    Dim QUELLE As String, FILEFILTER As String, wbRead As Workbook, ws As Worksheet, rowCurrent As Long, fileDate As Variant, filepath As String, file As String
    'Quelle  
    QUELLE = "D:\data"  
    ' Dateifilter  
    FILEFILTER = "lagerdaten_*.xlsx"  
    ' Daten auf das erste Sheet der aktuellen Mappe kopieren  
    With ThisWorkbook.Sheets(1)
        ' nächste freie Zeile ermitteln  
        rowCurrent = .UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
        ' Dateien auflisten  
        file = Dir(QUELLE & "\" & FILEFILTER)  
        ' Alle Dateien mit Schleife durchlaufen  
        While file <> ""  
            ' Dateipfad aus Pfad und Dateiename zusammensetzen  
            filepath = QUELLE & "\" & file  
            ' Dateidatum holen  
            fileDate = FileDateTime(filepath)
            ' Wenn das Änderungsdatum dem heutigen Tag entspricht  
            If fileDate > Date And fileDate < DateAdd("d", 1, Date) Then  
                ' öffne Datei  
                Set wbRead = CreateObject(filepath)
                ' für jedes Sheet in der Datei  
                For Each ws In wbRead.Sheets
                    ' kopiere den Inhalt in die aktuelle Datei  
                    ws.UsedRange.Copy Destination:=.Cells(rowCurrent, "A")  
                    ' nächste freie Zeile definieren  
                    rowCurrent = .UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
                Next
                ' Datei schließen  
                wbRead.Close False
            End If
            ' nächste Datei  
            file = Dir
        Wend
    End With
End Sub
Kannst du dir ja nun selbst an deine Umgebung anpassen face-wink.

Gruß sid
thepinky
thepinky 04.09.2023 um 09:10:18 Uhr
Goto Top
@sid

danke für deine Antwort.
Sobald ich Zeit habe, werde ich mir das ganze einmal näher anschauen!
thepinky
thepinky 09.09.2023 um 10:59:18 Uhr
Goto Top
@sid

bekomme es nicht hin.

Was muss ich denn bei den beiden "\" und While file <> "" einsetzen?
7907292512
7907292512 09.09.2023 aktualisiert um 11:24:00 Uhr
Goto Top
Zitat von @thepinky:

@sid

bekomme es nicht hin.

Was muss ich denn bei den beiden "\" und While file <> "" einsetzen?

Gar nichts, du musst nur Quellpfad und Dateifilter hier anpassen ..
'Quelle    
 QUELLE = "D:\data"    
 ' Dateifilter    
 FILEFILTER = "lagerdaten_*.xlsx"  
Der Rest läuft von selbst.