vanmatterhorn
Goto Top

Bericht (Tabelle) aus einer Matrix Tabelle generieren

Hallo,

ich hab mal wieder Probleme etwas in Excel umzusetzen und würde mich freuen möglichst schnell eine Antwort zu erhalten

Ich habe eine Matrixtabelle erstellt in der ich Produktfeatures Pflege (mal beispielhaft im Bild dargestellt). Nun will ich aus der Matrixtabelle eine Übersicht generieren, die für jedes Produkt alle möglichen Features auflistet (auch im Bespiel aufgezeigt)

f51c4c6d6a58061ede5f0987d5e60bb6

Bisher mache ich das immer manuell - sprich ich autofilter jedes feature und copy und paste die "stehenbleibenden" Produkte in eine extra Tabelle. Da das mitunter ziemlich aufwendig wird habe ich mich gefragt, ob das irgendwie automatisierbar geht !? Geht das über eine Formel, Pivot, VBA ?

Ich habe keine besonderen Excelkenntnisse und benutze Excel2007. Ich bin für jede hilfe dankbar.

Content-Key: 152696

Url: https://administrator.de/contentid/152696

Printed on: April 25, 2024 at 17:04 o'clock

Member: mathe172
mathe172 Oct 13, 2010 at 18:19:46 (UTC)
Goto Top
Hallo vanMatterhorn!

Ich kenne mich jetzt zwar mit vb.net besser als mit VBA aus, aber eigentlich sollte es irgendwie so gehen:

Gehe alle Zeilen durch:
    Prüfe, ob Zeile gleiches Produkt beinhaltet wie Vorgängerzeile
        Wenn nicht, gehe alle Features durch:
            Schreibe für jede Ausprägung die ID, das Prdukt, Feature und Ausprägung hin (in die nächste Zeile)
             Fange neues Produkt an (Listen leeren etc.)
        Gehe alle Features durch:
             Wenn bei diesem Produkt nicht vorhanden, füge der Liste hinzu
Hoffe irgendjemand kann funktionieren Code daraus machen (bin leider gescheitert face-sad)

Mathe172
Member: mathe172
mathe172 Oct 15, 2010 at 10:24:27 (UTC)
Goto Top
Hallo nochmal!
Versuch mal das: (bitte abändern wo nötig)
'Tabelle1 in Sub Routine: AusgangsTabelle  
Sub Routine()
Dim LetztesProdukt As String
'Diesen Dreierblock pro Future einmal einfügen und abändern  
Dim Future1Name As String
Future1Name = "Verfügbare Farben"   'Name des ersten Futures  
Dim Future1(3) As String            '3: 'Anzahl Möglicher Ausprägungen -1  

Dim Future2Name As String
Future2Name = "USB Anschluss"       'Name des zweiten Futures  
Dim Future2(1) As String            '1: 'Anzahl Möglicher Ausprägungen -1  

Dim Future3Name As String
Future3Name = "HDMI"                 '...  
Dim Future3(1) As String             '...  

For i = 1 To 10000 '1:Erste Zeile in der ein Produkt steht  
    Dim Produkt As String
    Produkt = Tabelle1.Cells(i, 2).Value '2: Spalte in der Produktname steht  
    If Not Produkt = LetztesProdukt And i > 1 Then '1:Gleiches wie 3 Zeilen drüber  
    'Diesen Block pro Future einmal einfügen und abändern  
    '1 nach "," in zweiter Zeile:Spalte mit Nummer  
        Call Hinschreiben( _
            Tabelle1.Cells(i - 1, 1).Value, _
            LetztesProdukt, _
            Future1Name, _
            Future1())
        Call Leeren(Future1())
        
        Call Hinschreiben( _
            Tabelle1.Cells(i - 1, 1).Value, _
            LetztesProdukt, _
            Future2Name, _
            Future2())
        Call Leeren(Future2())
        
        Call Hinschreiben( _
            Tabelle1.Cells(i - 1, 1).Value, _
            LetztesProdukt, _
            Future3Name, _
            Future3())
        Call Leeren(Future3())
    End If
    LetztesProdukt = Produkt
    
    ''Diese Zeile pro Future einmal einfügen und abändern  
    Call Einfügen(Future1, Tabelle1.Cells(i, 3).Value) '3:Spalte mit erstem Future  
    Call Einfügen(Future2, Tabelle1.Cells(i, 4).Value) '4:Spalte mit zweitem Future  
    Call Einfügen(Future3, Tabelle1.Cells(i, 5).Value) '...  
    If Produkt = "" Then Exit For  
Next
End Sub

'Tabelle1 in Sub Hinschreiben: ZielTabelle  
Sub Hinschreiben( _
ByVal Produktnummer As String, _
ByVal Produkt As String, _
ByVal FutureName As String, _
ByRef Future() As String)
Static Zeile As Integer
Dim ErsteZeile As Integer
ErsteZeile = 20 'Erste Zeile in der ein Eintrag hinsoll  
For i = 0 To UBound(Future)
    If Not Future(i) = "" Then  
        Tabelle1.Cells(Zeile + ErsteZeile, 1).Value = Produktnummer '1:Spalte in die Nummer soll  
        Tabelle1.Cells(Zeile + ErsteZeile, 2).Value = Produkt '2:Spalte in die Produktname soll  
        Tabelle1.Cells(Zeile + ErsteZeile, 3).Value = FutureName '3:...Future  
        Tabelle1.Cells(Zeile + ErsteZeile, 4).Value = Future(i) '4:...Ausprägung  
        Zeile = Zeile + 1
    End If
Next
End Sub

Sub Leeren(ByRef Feld() As String)
For i = 0 To UBound(Feld)
    Feld(i) = ""  
Next
End Sub

Sub Einfügen(ByRef Future() As String, ByVal Ausprägung As String)
        For i = 0 To UBound(Future)
            If Future(i) = Ausprägung Then Exit Sub
        Next
        For i = 0 To UBound(Future)
            If Future(i) = "" Then  
                Future(i) = Ausprägung
                Exit For
            End If
        Next
End Sub

Mathe172