Excel 2010: Matrix in Liste zurück umwandeln
Hallo,
ich habe hier ein kleines Excel-Problem, und zwar will ich aus einer Matrix (zweidimensional) wieder eine eindimensionale Liste machen, zur Veranschaulichung mal dieses Beispiel hier, bei der die Matrix mit den Mengen je Kunde und Artikel vorgegeben ist und eine Liste in der Form des Beispiels darunter erzeugt werden soll:
![5943a1aa1e431f383bd691efafc9c682 - 13cc1af464a1e90f03a58aeb16076fa8 5943a1aa1e431f383bd691efafc9c682](/images/c/2016/03/04/13cc1af464a1e90f03a58aeb16076fa8.jpg)
..also quasi eine "Pivot-Tabelle rückwärts", wenn man so möchte!
Das geht vermutlich nur per VBA, oder?
Ich bin euch für jeden Tipp dankbar!
Marcus
ich habe hier ein kleines Excel-Problem, und zwar will ich aus einer Matrix (zweidimensional) wieder eine eindimensionale Liste machen, zur Veranschaulichung mal dieses Beispiel hier, bei der die Matrix mit den Mengen je Kunde und Artikel vorgegeben ist und eine Liste in der Form des Beispiels darunter erzeugt werden soll:
![5943a1aa1e431f383bd691efafc9c682 - 13cc1af464a1e90f03a58aeb16076fa8 5943a1aa1e431f383bd691efafc9c682](/images/c/2016/03/04/13cc1af464a1e90f03a58aeb16076fa8.jpg)
..also quasi eine "Pivot-Tabelle rückwärts", wenn man so möchte!
Das geht vermutlich nur per VBA, oder?
Ich bin euch für jeden Tipp dankbar!
Marcus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 289420
Url: https://administrator.de/forum/excel-2010-matrix-in-liste-zurueck-umwandeln-289420.html
Ausgedruckt am: 18.02.2025 um 22:02 Uhr
4 Kommentare
Neuester Kommentar
![114757](/images/members/profile_male_48x48.png)
https://drive.google.com/file/d/0B_Oqbs4tcHfrRkdVejJuMHFwdEU/view?usp=sh ...
Gruß jodel32
-edit- leicht nachkorrigiert
Sub ListMatrix()
With Sheets(1)
'jede Zelle der Kundennamen von oben nach unten durchlaufen
For Each r In .Range("A3:A" & .Cells(Rows.Count, "A").End(xlUp).Row)
' Die Anzahl der Spaltenüberschriften ermitteln und darüber iterieren
For c = 1 To .Range("A2").End(xlToRight).Column - 1
' Nur wenn Wert größer 0 dann erstelle neue Einträge
If r.Offset(0, c).Value > 0 Then
' so oft Einträge erstellen wie der Wert der Zelle
For i = 1 To r.Offset(0, c).Value
' Nächste freie Zeile ermitteln
Set newline = Sheets(2).Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
' Wert der neuen Zeile mit Kundenname und Artikelbezeichnung setzen
newline.Resize(1, 2).Value = Array(r.Value, .Cells(2, c + 1).Value)
Next
End If
Next
Next
End With
End Sub
-edit- leicht nachkorrigiert
![114757](/images/members/profile_male_48x48.png)
Ja nee, das ist normal, weil der Code kein neues Blatt erzeugt sondern das zweite Sheet hier immer als Ausgabe benutzt, wenn du das löschst und kein zweites Sheet ist mehr da , dann ist ja klar das ein Index-Out-of-Bounds kommt ![face-wink face-wink](/images/icons/fa/light/face-laugh-wink.svg)
Das lässt sich aber alles nach Bedarf anpassen das immer ein neues Sheet erzeugt wird etc pp..., war ja nur ein simples Beispiel.
Das lässt sich aber alles nach Bedarf anpassen das immer ein neues Sheet erzeugt wird etc pp..., war ja nur ein simples Beispiel.
super sieht das aus, da muss ich jetzt nur noch durchsteigen
Oben im Quelltext mit Kommentaren ergänzt ...