adminknecht
Goto Top

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

..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

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

114757
Lösung 114757 26.11.2015 aktualisiert um 15:14:28 Uhr
Goto Top
https://drive.google.com/file/d/0B_Oqbs4tcHfrRkdVejJuMHFwdEU/view?usp=sh ...
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
Gruß jodel32

-edit- leicht nachkorrigiert
AdminKnecht
AdminKnecht 26.11.2015 um 11:52:46 Uhr
Goto Top
..super sieht das aus, da muss ich jetzt nur noch durchsteigen face-smile

Was mir aufgefallen ist das, wenn ich in deiner Original-XLSM den Code via Button einmal ausführe und dann das erzeugte 2. Tabellenblatt lösche um es erneut zu testen, dann bekomme ich einen "Index ausserhalb des gültigen Bereichs"-Fehler... ?
114757
114757 26.11.2015 aktualisiert um 12:33:30 Uhr
Goto Top
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
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 ...
AdminKnecht
AdminKnecht 26.11.2015 um 15:14:20 Uhr
Goto Top
Perfekt, ich danke dir sehr für deine Mühe, damit habe ich das hinbekommen und werde das in einer ruhigen Minute auch mal anpassen, das z.B. mehr als eine Zeile als Beschriftungen dazu gefügt wird!

Viele Grüße
Marcus