Hallo Leute,
ich habe folgendes Problem:
Ich habe eine Excel Datei(über 100MB groß) mit über 50 Tabellenblättern die alle Zeitreihen-Daten in dem Format enthalten: (siehe Quelldatei.xlsx)
[img]
Dateiupload bitte im Forum! So geht es: Klick mich!
]
Nun möchte ich daraus immer die vorletzte Spalte mit dem Kopf "2016" in eine Auswertungs-Tabelle ziehen: (siehe Auswertung.xlsm)
[img]
Dateiupload bitte im Forum! So geht es: Klick mich!
]
Erklärung zu den hochgeladenen Dateien: Die Datei "Quelldatei.xlsx" enthält die Zeitreihen-Daten in 3 beispielhaften Tabellenblättern und hat sonst keine weitere Funktion. Die Datei "Auswertung.xlsm" hat ein Blatt "Daten", worin die Daten(immre Spalte "2016") aus "Quelldatei" importiert werden sollen, alle nacheinander Spalte für Spalte. Falls es hilft, ist in dem Blatt "DatenParameter" die gleiche Tabelle nochmal, nur anstatt von normalen Tabellenköpfen, der Name des jeweiligen Blattes woraus die Daten gezogen werden sollen.
Das wollte ich mit einer Abfrage(Query) umsetzen. Allerdings müsste ich dann für jedes einzelne Worksheet (über 50) eine neue Abfrage einrichten. Daher dachte ich wäre es sinnvoll dies mit VBA zu automatisieren. Allerdings schaffe ich es nicht alles, was variabel sein soll, mit Variablen zu bestücken, d.h. dass Name des Worksheets und Spaltename automatisch verändert werden können.
In dem Fall heißt das Worksheet "RoE", weshalb ich versuchen wollte überall wo dieser Name steht, eine Variable "shName" einzusetzen. Allerdings scheitert dies scheinbar beim
und
Auswertung.xlsm (Größe: 31,47 KB / Downloads: 2)
Quelldatei.xlsx (Größe: 23,95 KB / Downloads: 4)
Ich hoffe ihr könnt mir dabei helfen.
Vielen Dank im Voraus!
PS: Ist das überhaupt die beste, vorallem schnellste Möglichkeit um über 100MB Daten zu laden, denn Excel läd ja trotzdem immer die ganze Tabelle auch wenn nur eine spezielle Spalte benötigt wird.
Edit: Beispieldatei hinzugefügt.
ich habe folgendes Problem:
Ich habe eine Excel Datei(über 100MB groß) mit über 50 Tabellenblättern die alle Zeitreihen-Daten in dem Format enthalten: (siehe Quelldatei.xlsx)
[img]
Dateiupload bitte im Forum! So geht es: Klick mich!
]
Nun möchte ich daraus immer die vorletzte Spalte mit dem Kopf "2016" in eine Auswertungs-Tabelle ziehen: (siehe Auswertung.xlsm)
[img]
Dateiupload bitte im Forum! So geht es: Klick mich!
]
Erklärung zu den hochgeladenen Dateien: Die Datei "Quelldatei.xlsx" enthält die Zeitreihen-Daten in 3 beispielhaften Tabellenblättern und hat sonst keine weitere Funktion. Die Datei "Auswertung.xlsm" hat ein Blatt "Daten", worin die Daten(immre Spalte "2016") aus "Quelldatei" importiert werden sollen, alle nacheinander Spalte für Spalte. Falls es hilft, ist in dem Blatt "DatenParameter" die gleiche Tabelle nochmal, nur anstatt von normalen Tabellenköpfen, der Name des jeweiligen Blattes woraus die Daten gezogen werden sollen.
Das wollte ich mit einer Abfrage(Query) umsetzen. Allerdings müsste ich dann für jedes einzelne Worksheet (über 50) eine neue Abfrage einrichten. Daher dachte ich wäre es sinnvoll dies mit VBA zu automatisieren. Allerdings schaffe ich es nicht alles, was variabel sein soll, mit Variablen zu bestücken, d.h. dass Name des Worksheets und Spaltename automatisch verändert werden können.
Code:
ActiveWorkbook.Queries.Add Name:="RoE", Formula:= _
"let" & Chr(10) & " Source = Excel.Workbook(File.Contents(""C:UsersMaxOneDriveFinanzenReutersProjekttimeseries request neu.xlsm""), null, true)," & Chr(10) & " Sheet = Source{[Item=""RoE"",Kind=""Sheet""]}[Data]," & Chr(10) & " PromoteHeaders = Table.PromoteHeaders(Sheet, [PromoteAllScalars=true])," & Chr(10) & " RemoveColumns = Table.SelectColumns(PromoteHeaders,{""2016""})" & Chr(10) & "in" & Chr(10) & " RemoveColumns"
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=RoE", _
Destination:=Range("$D$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [RoE]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = False
.ListObject.DisplayName = "RoE"
.Refresh BackgroundQuery:=False
End With
In dem Fall heißt das Worksheet "RoE", weshalb ich versuchen wollte überall wo dieser Name steht, eine Variable "shName" einzusetzen. Allerdings scheitert dies scheinbar beim
Code:
Location=RoE
Code:
.CommandText = Array("SELECT * FROM [RoE]")
Auswertung.xlsm (Größe: 31,47 KB / Downloads: 2)
Quelldatei.xlsx (Größe: 23,95 KB / Downloads: 4)
Ich hoffe ihr könnt mir dabei helfen.
Vielen Dank im Voraus!
PS: Ist das überhaupt die beste, vorallem schnellste Möglichkeit um über 100MB Daten zu laden, denn Excel läd ja trotzdem immer die ganze Tabelle auch wenn nur eine spezielle Spalte benötigt wird.
Edit: Beispieldatei hinzugefügt.