VBA - kombinierte Auflistung aus Matrix

Bild

Betrifft: VBA - kombinierte Auflistung aus Matrix
von: Josef
Geschrieben am: 29.10.2015 16:37:33

Schönen guten Abend allerseits,
um mein Anliegen verständlicher zu machen habe ich eine Beispieldatei erstellt:
https://www.herber.de/bbs/user/101124.xlsx
Wir haben darin eine Quelldatei, welche eine Matrix enthält, die unser Buchhaltungssystem ausspuckt.
Senkrecht sind dort unsere Sachkonten zu sehen, Waagerecht unsere Kostenstellen. Diese Matrix enthält nun Beträge, wenn in einem Konto ein Wert unter einer bestimmten Kostenstelle gebucht wurde. Die Kostenstellen werden immer alphanumerisch ausgegeben, also zuerst die Nummer dann die Bezeichnung.
Auf dem Tabellenblatt "Ausgabe" seht ihr das Endergebnis: eine Auflistung aller gefundenen Beträge und dazu, in welcher Kombination von Konto und Kostenstelle sie vorgefallen sind. Bisher erledige ich das alles händisch, aber ihr könnt euch vorstellen dass das viel Arbeit ist.
Ist es möglich, die Matrix durch ein Makro durchsuchen zu lassen, und so automatisch eine solche Auflistung zu erstellen? Meine VBA-Kentnisse sind leider sehr begrenzt.
Ich hoffe mein Anliegen ist verständlich, ansonsten bin ich für Fragen offen.
Ich wünsch euch einen schönen Abend.
Gruß
Josef

Bild

Betrifft: AW: VBA - kombinierte Auflistung aus Matrix
von: ransi
Geschrieben am: 29.10.2015 17:57:43
Hallo Josef,
Teste mal dies:

Option Explicit

Sub machs()
    Dim arr As Variant
    Dim I As Integer
    Dim L As Long
    Dim objDic As Object
    arr = Sheets("Quelldaten").Range("A1").CurrentRegion
    Set objDic = CreateObject("scripting.Dictionary")
    For I = 2 To UBound(arr, 2)
        For L = 2 To UBound(arr)
            If arr(L, I) <> "" Then objDic(Left(arr(1, I), 6) & arr(L, 1)) = arr(L, I)
        Next
    Next
    With Sheets("ausgabe")
        .Range("A2").Resize(objDic.Count) = WorksheetFunction.Transpose(objDic.keys)
        .Range("B2").Resize(objDic.Count) = WorksheetFunction.Transpose(objDic.items)
    End With
End Sub


DAs gibt die selben Werte aus wie deine Beispieltabelle
ransi

Bild

Betrifft: AW: VBA - kombinierte Auflistung aus Matrix
von: Josef
Geschrieben am: 30.10.2015 08:21:15
Guten Morgen,
funktioniert einwandfrei, ich bin baff. Ich habe das Dictionary object nie so wirklich kapiert. Ich bin begeistert was man damit machen kann.
Danke und Gruß

Bild

Betrifft: AW: VBA - kombinierte Auflistung aus Matrix
von: Josef
Geschrieben am: 30.10.2015 08:47:53
Hallo nochmal,
ich weiß, das Thema hat sich im Grunde nun erledigt doch ich habe noch eine Verständnis-Frage:
Kann mir bitte jemand erklären, was folgende Zeile in ransis Skript (vielen Dank nochmal!) bewirkt?

Then objDic(Left(arr(1, I), 6) & arr(L, 1)) = arr(L, I)
Den Rest verstehe ich soweit.
Beste Grüße

 Bild

Beiträge aus den Excel-Beispielen zum Thema "VBA - kombinierte Auflistung aus Matrix"