Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Kreuztabelle in Liste umwandeln
#1
Hallo zusammen,

vorweg: Ich habe keine wirklichen Excel-Kenntnisse dafür aber eine kleine Aufgabe im Büro bekommen.

Wir haben ein Excel-File mit ca. 300 Spalten und 1.000 Zeilen, bei welchen Kunden (Zeilen) bestimmte Eigenschaften (Spalten) zugeordnet sind.
Dies geschieht aktuell über ein "x" in der jeweiligen Zelle.

Zum Import ins ERP benötigen wir nun eine Liste, in welcher die Zuordnung untereinander erfolgt, d.h.

Vorher:
                 Eigenschaft 10    Eigenschaft 20   Eigenschaft 30
Kunde A                                     x
Kunde B              x                                              x
Kunde C                                     x                       x

Nacher:

Kunde A            20
Kunde B            10
Kunde B            30
Kunde C            20
Kunde C            30

Hat jemand einen Tipp für mich, wie ich die obere in die untere Form bekomme?

Vielen lieben Dank.
Antworten Top
#2
Hallo

Das ist ein sehr guter Betreff.  :28:

Daten normalisieren
-----------------------------------------------------------------------------------------
Videos
mit VBA / mit Pivot-Tabellen-Assistent von Andrea Thehos (de)
mit Pivot-Tabellen-Assistent von Debra Dalgliesh (Contextures) (en)
mit Power Query von Miguel Escoba (The Power User) (en)
mit Pivot-Tabellen-Assistent von Mike Girvin (ExcelIsFun) (en)
mit Pivot-Tabellen-Assistent von Bill Jelen (MrExcel) (en)
mit Power Query von Ken Puls (en)
mit Power Query von Bill Jelen (MrExcel) (en)
mit Pivot-Tabellen-Assistent von Andrea Thehos (de)
mit Power Query von Mike Girvin (ExcelIsFun) (en)
mit Power Query von Mike Girvin (ExcelIsFun) (en)
mit Power Query von Mike Girvin (ExcelIsFun) (en)
mit Power Query von Mike Girvin (ExcelIsFun) (en)
-----------------------------------------------------------------------------------------
Aufgabe und Lösungen von Andreas Thehos (de)
Aufgabe
Lösung mit Power Query
Lösung mit Pivot-Tabellen-Assistent
Lösung mit WAHL()
Lösung mit VBA
-----------------------------------------------------------------------------------------
Artikel
mit INDEX() (excelformeln.de)
mit Makro oder Power Query (excel-ist-sexy.de)
How-to Convert an Existing Excel Data Set to a Pivot Table Format
Quick Ways to Unpivot Excel Data
Unpivot Excel Data With a Macro
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

Antworten Top
#3
Hallo,

von mir eine VBA Lösung von mir: :19:


Code:
Sub umstellen()
 Dim i As Long, j As Long, lngZ As Long, lngS As Long
 Dim k As Long
 Dim strgMarker As String
 
 Dim wksQuelle As Worksheet
 Dim wksZiel As Worksheet
 
 Dim arr As Variant
 Dim arrOut()
 Dim D1 As Object
 Dim varK
 Set D1 = CreateObject("Scripting.Dictionary")
 
 strgMarker = "x"
 
 Set wksQuelle = Worksheets("Tabelle2")  'Quelltabelle
 Set wksZiel = Worksheets("Tabelle3")    'Zieltabelle in der die Daten umgestellt reingeschrieben werden
 
 With wksQuelle
   lngZ = .Cells(.Rows.Count, 1).End(xlUp).Row
   lngS = .Cells(1, .Columns.Count).End(xlToLeft).Column
   k = Application.CountIf(.Range(.Cells(1, 1), .Cells(lngZ, lngS)), strgMarker)
   arr = .Range(.Cells(1, 1), .Cells(lngZ, lngS))
   
   For i = 2 To UBound(arr)
     For j = 2 To UBound(arr, 2)
       If arr(i, j) = strgMarker Then D1(arr(i, 1)) = D1(arr(i, 1)) & "|" & arr(1, j)
     Next j
   Next i
   
   ReDim arrOut(k - 1, 1)
   k = 0
   
   For Each varK In D1.Keys
     For j = 1 To UBound(Split(D1(varK), "|"))
       arrOut(k, 0) = varK
       arrOut(k, 1) = Split(D1(varK), "|")(j)
       k = k + 1
     Next j
   Next
 End With
 
 With wksZiel 'schreiben in Zieltabelle
   .Range("A1").CurrentRegion.Offset(1, 0).ClearContents
   .Range("A2:B2").Resize(k) = arrOut
 End With
 
 D1.RemoveAll
 Set D1 = Nothing
 Set wksQuelle = Nothing
 Set wksZiel = Nothing

End Sub
Zum Verständnis, so sehen die daten vorher aus:
Arbeitsblatt mit dem Namen 'Tabelle2'
 ABCD
1 102030
2Kunde A x 
3Kunde Bx x
4Kunde C xx
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
und so hinterher:
Arbeitsblatt mit dem Namen 'Tabelle3'
 AB
1KundeWert
2Kunde A20
3Kunde B10
4Kunde B30
5Kunde C20
6Kunde C30
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
Gruß Atilla
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste