Anzeige
Archiv - Navigation
1876to1880
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Daten in Tabelle überführen

Daten in Tabelle überführen
21.03.2022 14:41:37
Sanja
Liebes Excel-Forum,
eine mir vorliegende Datei enthält Daten in einer Struktur, die sich nicht gut weiterverarbeiten lässt. Ich möchte die Daten gerne in eine strukturierte Tabelle überführen, um diese mit Pivots o.ä. auswerten zu können. Dabei möchte ich gerne das händische Kopieren umgehen und die Daten einfacher in die gewünschte Struktur bringen.
Ich habe den Aufbau der mir vorliegenden Tabelle einmal nachgebildet.
https://www.herber.de/bbs/user/151936.xlsb
Die Tabelle enthält eine Vielzahl an Registern, die die Daten auf Kundenlevel beinhalten (vgl. Customer1 und Customer2). Hat hier jemand eine Idee, wie ich die Daten am geschicktesten in eine Form übertrage, die dem Register "Data" ähnelt?
Freue mich über jeden Hinweis!
Danke im Voraus!
Mit freundlichen Grüßen
Sanja

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: die XL-Version ist da schon von Relevanz ...
21.03.2022 14:55:40
Relevanz
Hallo Sanja,
... für die Vorbereitung würde sich Power Query (PQ) in Kombination mit Pivotauswertung anbieten (PQ ist in XL ab 2016 direkt integriert, in Version XL2013 könnte es nach installiert werden). Mehr zu PQ sieh mal hier: https://excelhero.de/power-query/power-query-ganz-einfach-erklaert/
Gruß Werner
.. , - ...
AW: Daten in Tabelle überführen
21.03.2022 15:28:44
Herbert_Grom
Hallo Sanja,
meintest du das wirklich so, wie du es in "Data" dargestellt hast? Schau dir das noch einmal genau an!
Servus
AW: Daten in Tabelle überführen
21.03.2022 20:46:29
Yal
Hallo Sanja,
irgendwie ist mir langweilig...
mit folgendem Code bekommst Du die Daten in "Data". Die Positionen Cost und Revenue werden übereinander, ist aber zweitrangig.
Eine Lösung mit PQ mache ich vielleicht noch. Aber mit "Basiskenntnisse in Excel" wirst Du damit vielleicht überfordert.

Sub entpivotieren()
Dim wQ As Worksheet 'Quelle
Dim wZ As Worksheet 'Ziel
Dim Z As Range
Dim R As Long
Dim C As Long
Dim Serv As String
Dim Pos As String
Set wZ = ThisWorkbook.Worksheets("Data")
wZ.Rows("2:99999").ClearContents
For Each wQ In ThisWorkbook.Worksheets
If wQ.Name Like "Customer*" Then
For R = 4 To wQ.Range("A99999").End(xlUp).Row
Serv = wQ.Cells(R, 1).Value
If Serv  "" Then
Serv = Left(Serv, InStrRev(Left(Serv, 14), " ") - 1)
Pos = Trim(Mid(wQ.Cells(R, 1).Value, Len(Serv) + 1))
If Left(Pos, 5)  "Gross" Then
For C = 2 To 36 'anzahl Spalte ist fest
If wQ.Cells(2, C).Value  "Deviation" Then
With wZ.Range("A99999").End(xlUp)
.Offset(1, 0) = Serv    'Service
.Offset(1, 1) = wQ.Name 'Kunde
.Offset(1, 2) = DateKonv(wQ.Cells(1, C).Text & wQ.Cells(1, C + 1).Text) 'mindestens eine von beide ist leer...
.Offset(1, 3) = wQ.Cells(2, C) 'Data typ
.Offset(1, 4) = Pos     'Berichtsposition
.Offset(1, 5) = wQ.Cells(R, C).Value 'Werte
End With
End If
Next
End If
End If
Next
End If
Next
End Sub
Private Function DateKonv(ByVal EnglDatum As String) As String
Dim Monat
Dim Jahr
Const cEngMonths = "xx;jan;feb;mar;apr;may;jun;jul;aug;sep;oct;nov;dec"
EnglDatum = LCase(Trim(EnglDatum))
Jahr = CInt(Right(EnglDatum, 2))
Monat = Left(EnglDatum, 3)
Monat = InStr(1, cEngMonths, Monat, vbTextCompare) / 4
DateKonv = DateSerial(Jahr, Monat, 1)
End Function
VG
Yal
Anzeige
Version Power Query
21.03.2022 22:44:09
Yal
Moin!
@Sanja: Du wirst mit dieser Power Query Version nicht viel anfangen können, aber die Meinung der Kollegen hätte ich gern.
@PQ-Kenner:
Ich schummle zuerst ein Bischen...
Ich füge ein Blatt "Customer" vor alle anderen Blätter. Darin als erste Zeile:
Categ_Date, Actual_01.01.2022, Budget_01.01.2022, Deviation, Actual_01.02.2022, Budget_01.02.2022, Deviation, ...
dann Datei speichern.
In einer separaten Datei (wobei es kann auch dieselbe sein), öffne ich eine PQ Abfrage mit:

let
Quelle = Excel.Workbook(File.Contents("C:\herber_forum\151936.xlsb"), null, true),
#"Gefilterte Zeilen" = Table.SelectRows(Quelle, each Text.StartsWith([Name], "Customer")),
#"Erweiterte Data" = Table.ExpandTableColumn(#"Gefilterte Zeilen", "Data", {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16", "Column17", "Column18", "Column19", "Column20", "Column21", "Column22", "Column23", "Column24", "Column25", "Column26", "Column27", "Column28", "Column29", "Column30", "Column31", "Column32", "Column33", "Column34", "Column35", "Column36", "Column37"}, {"Data.Column1", "Data.Column2", "Data.Column3", "Data.Column4", "Data.Column5", "Data.Column6", "Data.Column7", "Data.Column8", "Data.Column9", "Data.Column10", "Data.Column11", "Data.Column12", "Data.Column13", "Data.Column14", "Data.Column15", "Data.Column16", "Data.Column17", "Data.Column18", "Data.Column19", "Data.Column20", "Data.Column21", "Data.Column22", "Data.Column23", "Data.Column24", "Data.Column25", "Data.Column26", "Data.Column27", "Data.Column28", "Data.Column29", "Data.Column30", "Data.Column31", "Data.Column32", "Data.Column33", "Data.Column34", "Data.Column35", "Data.Column36", "Data.Column37"}),
#"Höher gestufte Header" = Table.PromoteHeaders(#"Erweiterte Data", [PromoteAllScalars=true]),
#"Gefilterte Zeilen2" = Table.SelectRows(#"Höher gestufte Header", each Text.EndsWith([Categ_Date], "Revenue") or Text.EndsWith([Categ_Date], "Costs")),
#"Entpivotierte andere Spalten" = Table.UnpivotOtherColumns(#"Gefilterte Zeilen2", {"Customer", "Categ_Date"}, "Data Typ", "Wert"),
#"Gefilterte Zeilen1" = Table.SelectRows(#"Entpivotierte andere Spalten", each not Text.StartsWith([Data Typ], "Deviation")),
#"Spalte nach Position teilen" = Table.SplitColumn(#"Gefilterte Zeilen1", "Data Typ", Splitter.SplitTextByEachDelimiter({"_"}, QuoteStyle.Csv, true),{"Data Type", "Date"}),
#"Spalte nach Trennzeichen teilen" = Table.SplitColumn(#"Spalte nach Position teilen", "Categ_Date", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, true), {"Category", "Spalte1.2"}),
#"Geänderter Typ" = Table.TransformColumnTypes(#"Spalte nach Trennzeichen teilen",{{"Wert", type number}}),
#"Pivotierte Spalte" = Table.Pivot(#"Geänderter Typ", List.Distinct(#"Geänderter Typ"[Spalte1.2]), "Spalte1.2", "Wert", List.Sum),
#"Neu angeordnete Spalten" = Table.ReorderColumns(#"Pivotierte Spalte",{"Category", "Customer", "Date", "Data Type", "Revenue", "Costs"})
in
#"Neu angeordnete Spalten"
das Ergebnis entspricht das Format von Sanja.
Nun ist ja die Frage, wie könnte ich am geschickteste das Einfügen von diesem Pseudo-Customer-Blatt?
Alle Customer-Blätter in aktive Tabellen umwandeln und als PQ-Quelle Excel.CurrentWorkbook() geht auch ganz gut, aber die Spalten-Überschriften lassen sich dann nicht so leicht nutzen ...
Für die Umwandlung in aktiven Tabellen würde ich eine Marko verwenden. Man konnte darin die Überschriften setzen (ers reicht, wenn es im ersten Blatt vorkommt). Es bleibt aber Bastelei. Es lässt sich nicht "schön" umstellen.
Hat jemand eine Idee?
VG
Yal
Anzeige
AW: Daten in Tabelle überführen
26.03.2022 16:49:15
Herbert_Grom
Oder wolltest du das evtl. so:
Userbild
Servus
AW: hierzu ...
28.03.2022 08:43:32
neopa
Hallo Herbert,
... die Darstellung Deiner "Ergebnis-" Daten zeigt mir bzw. lässt zumindest vermuten, dass Du die von Sanja bereitgestellten identischen Daten für die verschiedenen Service Nr und Monate für Deine wohl schon angedachte Lösung (sicherlich per VBA, oder?) zur besseren Ergebniskontrolle abgeändert hast, oder?
Ich hatte mir auch Gedanken zu einer möglichen Lösung gemacht und meine, dass diese fast ausschließlich (die Datumszeile hätte ich nach Gruppierung der Daten-Tabellenblätter von Hand in allen Zellen schnell komplettiert und in A1:A2 eine entsprechende Bezeichnung eingetragen und danach die Datenlisten einzeln in "intelligente Tabellen gewandelt) über PQ möglich ist. Wobei ich dabei natürlich von einer überschaubaren Anzahl an Customern ausgegangen war. Sanja müsste schon mindestens noch angeben, wie viele Tabellenblätter genau max auszuwerten sind. Wenn es sehr viele Daten-Tabellenblätter sind, ist der von Yal aufgezeigte Lösungsansatz wohl geeigneter.
Gruß Werner
.. , - ...
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige