erstmal vielen Dank für die Hilfe, die ich hier bereits erfahren habe. Ich weiß nicht, wie viele Heulkrämpfe ich sonst bekommen hätte.
Aktuell stehe ich vor einer, für mich, nicht lösbaren Aufgabe.
Mit Power Query bin ich leider noch nicht so fit.
Ich möchte einige Hundert Dateien zusammenführen. Bekomme sie aber nicht sauber in den richtigen Aufbau.
Bin seit Stunden am Spalten verschieben, Pivotieren, Entpivotieren....ich bekomme es nicht hin und verzweifel mittlerweile.
Ich bekomme die Leerzellen und die Datenzellen nicht sauber in den gewünschten Aufbau verschoben.
2 Musterdateien für die Zusammenführung füge ich bei, sowie eine Datei, wie der Aufbau als Ergebnis aussehen sollte.
Wäre klasse, wenn man mir eine kleine Anleitung gibt, damit ich die Zusammenführung selbst an den Dateien durchführen kann.
Bin für jede Hilfe dankbar.
04.02.2022, 11:52 (Dieser Beitrag wurde zuletzt bearbeitet: 04.02.2022, 11:55 von Warkings.)
Sehe ich das richtig, die einzelnen Dateien stellen jeweils eine Zeile (also ein Artikel) in der Zieldatei dar? Es kommt nicht vor, dass in einer Datei zwei Artikel drin sind.
Und die Daten stehen immer genau in der gleichen Zelle, wie in den Beispieldateien?
Und die Info in den Spalten A/B sind fest, in der Zieldatei sind das ja genau due Splatenüberschriften.
Wenn das so ist, wo ist das Problem? Rein Fleißarbeit mit Powerquere, jeweils ein Drilldown auf die einzelnen Zellen machen und in einer Tabelle zusammenführen
04.02.2022, 12:24 (Dieser Beitrag wurde zuletzt bearbeitet: 04.02.2022, 12:30 von el-rettev.)
Ja genau, eine Datei steht für einen Artikel. Der Aufbau der Dateien ist immer gleich.
Die Zieltabelle spiegel den Aufbau, wie ich es in Power Query dargestellt haben möchte.
Es gibt keine bestimmte Datei mit den Überschriften wo die Daten hinein extrahiert werden sollen.
Was ich bisher versucht habe:
Die Spalte mit Artikelbezeichnung ganz nach links. Dann nach unten ausfüllen.
Dann versuche ich die "Anzahl" wie die anderen Bezeichnungen in Spalte D zu bekommen. Die Werte sollen dann ebenfalls in eine Spalte untereinander.
Dann die Bezeichnungen als Überschriften und die Werte die untereinander sind, sollen nebeneinander.
Ich hab als Screenshot meine Ausgangslage dargestellt.
Die Drilldowns habe ich ausgeführt jetzt zum Test ausgeführt.
Aber vllt. sehe ich den Wald vor lauter Bäumen nicht mehr.
Ich weiss dann nicht, wie es weiter gehen soll. Wie ich was wo hinschieben muss.
Erstmal vielen Dank für deine Hilfe. Das ist genau das Ziel, was benötigt wird.
Da ich gerade die Info von meinen Kollegen bekommen habe, dass es ab dem Jahreswechsel eine Änderung in der Struktur der Dateien gab, würde ich deinen Weg gerne individuell nachbauen können.
Hast du die Geduld mir da die wesentlichen Schritte noch zu erklären wie man zum Endziel gelangt?
Ich wäre dir super dankbar!!!!!
04.02.2022, 13:11 (Dieser Beitrag wurde zuletzt bearbeitet: 04.02.2022, 13:16 von Warkings.)
Zwei Antworten dazu
1. Nimm meinen Literaturtipp oben, speziell Kapitel 4 (also recht früh in dem Buch) behandelt das Thema "4 Importing All Files in a Folder"
2. In der Datei ist die "überflüssige" Query tblInput. Die ist die Grundlage für die Funktion fxInput, die beim Einlesen der Dateien verwendet wird. Dort siehst Du, wie ich "fleißig" auf die jeweiligen Zellen in der Excel-Tabelle einen Drilldown gemacht habe und danach in eine Tabelle überführe. Das könnte man wahrscheinlich noch optimieren
Option Explicit
Const strSheetQ As String = "ComTool" ' Die Tabelle wird ausgelesen
Const strSheetZ As String = "Sheet1" ' Die Tabelle in dieser Datei
Const strCellQ1 As String = "M6" ' Die Zelle wird ausgelesen
Const strCellQ2 As String = "D4"
Const strCellQ3 As String = "D5"
Const strCellQ4 As String = "G5"
Const strCellQ5 As String = "H115"
Const strCellQ6 As String = "K115"
Const strCellQ7 As String = "Q115"
Public Sub Files_Read()
Dim stCalc As Integer
Dim strDir As String
Dim objFSO As Object
Dim objDir As Object
On Error GoTo Fin
With Application
.ScreenUpdating = False
.AskToUpdateLinks = False
.EnableEvents = False
stCalc = .Calculation
.Calculation = xlCalculationManual
.DisplayAlerts = False
End With
Set objFSO = CreateObject("Scripting.FileSystemObject")
strDir = ThisWorkbook.Path ' Datei im gleichen Ordner wie Auswertungsdateien
Set objDir = objFSO.GetFolder(strDir)
'dirInfo objDir, "*.xls", True ' Mit Unterordner
dirInfo objDir, "*.xls"
Fin:
With Application
.ScreenUpdating = True
.AskToUpdateLinks = True
.EnableEvents = True
.Calculation = stCalc
.DisplayAlerts = True
End With
Set objDir = Nothing
Set objFSO = Nothing
End Sub
Public Sub dirInfo(ByVal objCurrentDir As Object, ByVal strName As String, _
Optional ByVal blnTMP As Boolean = False)
Dim objWorkbook As Workbook
Dim strFormula As String
Dim lngLastRow As Long
Dim varTMP As Variant
For Each varTMP In objCurrentDir.Files
If varTMP.Name Like strName And varTMP.Name <> ThisWorkbook.Name Then
With ThisWorkbook.Worksheets(strSheetZ)
lngLastRow = IIf(Len(.Cells(.Rows.Count, 2)), _
.Rows.Count, .Cells(.Rows.Count, 2).End(xlUp).Row) + 1
With .Cells(lngLastRow, 2)
.Formula = "='" & Mid(varTMP.Path, 1, _
InStrRev(varTMP.Path, "\")) & "[" & _
Mid(varTMP.Path, InStrRev(varTMP.Path, "\") + 1) & "]" & _
strSheetQ & "'!" & strCellQ1
.Offset(0, -1).Value = varTMP.Name
End With
With .Cells(lngLastRow, 3)
.Formula = "='" & Mid(varTMP.Path, 1, _
InStrRev(varTMP.Path, "\")) & "[" & _
Mid(varTMP.Path, InStrRev(varTMP.Path, "\") + 1) & "]" & _
strSheetQ & "'!" & strCellQ2
End With
With .Cells(lngLastRow, 4)
.Formula = "='" & Mid(varTMP.Path, 1, _
InStrRev(varTMP.Path, "\")) & "[" & _
Mid(varTMP.Path, InStrRev(varTMP.Path, "\") + 1) & "]" & _
strSheetQ & "'!" & strCellQ3
End With
With .Cells(lngLastRow, 5)
.Formula = "='" & Mid(varTMP.Path, 1, _
InStrRev(varTMP.Path, "\")) & "[" & _
Mid(varTMP.Path, InStrRev(varTMP.Path, "\") + 1) & "]" & _
strSheetQ & "'!" & strCellQ4
End With
With .Cells(lngLastRow, 6)
.Formula = "='" & Mid(varTMP.Path, 1, _
InStrRev(varTMP.Path, "\")) & "[" & _
Mid(varTMP.Path, InStrRev(varTMP.Path, "\") + 1) & "]" & _
strSheetQ & "'!" & strCellQ5
End With
With .Cells(lngLastRow, 7)
.Formula = "='" & Mid(varTMP.Path, 1, _
InStrRev(varTMP.Path, "\")) & "[" & _
Mid(varTMP.Path, InStrRev(varTMP.Path, "\") + 1) & "]" & _
strSheetQ & "'!" & strCellQ6
End With
With .Cells(lngLastRow, 8)
.Formula = "='" & Mid(varTMP.Path, 1, _
InStrRev(varTMP.Path, "\")) & "[" & _
Mid(varTMP.Path, InStrRev(varTMP.Path, "\") + 1) & "]" & _
strSheetQ & "'!" & strCellQ7
End With
.UsedRange.Value = .UsedRange.Value
End With
End If
Next varTMP
If blnTMP = True Then
For Each varTMP In objCurrentDir.SubFolders
dirInfo varTMP, strName
Next varTMP
End If
Set objWorkbook = Nothing
End Sub
Hallo.
Mit deiner Hilfe hätte ich einige Dateien bearbeiten können, da ich nur den Zielpfad hätte ändern müssen.
Daher vielen lieben Dank für deine Hilfe.
Da sich herausstellte, dass sich das auszulesene Formular mit der Zeit geändert hat, hätte ich den Query anpassen müssen.
Leider bin ich dort nicht ganz hintergestiegen. Zumindest nicht in der kurzen Zeit.
Hab mir nochmal Youtube Videos von Thehos, Gharani und Excelsfun angeschaut. Aber da sind die Beispiele dann doch immer sehr mustergültig. Die Videos heißen dann "cleaning messy Data". Aber die "messy Data" ist sauber in Spalten und dann doch nicht so "messy". Da wird dann nur mal eine leere Zeile entfernt, das Datumsformat angepasst und das wars.
Meine Recherche hat dann noch einen Code aus dem Jahr 2013 zum Vorschein gebracht.
Den wollte ich noch posten, falls den jemand gebrauchen kann. Muss noch mit den individuellen Tabellennamen angepasst werden und als .xls muss ggf. die Version auf .xlsx umgeschrieben werden.