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:
..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:
..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: 27.12.2024 um 10:12 Uhr
4 Kommentare
Neuester Kommentar
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
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
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 ...