Kreuztabelle mit VBA
21.04.2014 11:09:38
Erich
Hi Peter,
dein Beispiel habe ich ein wenig verallgemeinert. In Zeile 8 erhält Müller XXXX als zweite Zahlungsart.
Und sortiert ist auch nichts mehr.
So sieht es dann aus:
| A | B | C | D | E | F | G | H | I | J |
1 | Kunde | Knr | Art | Datum | | | 16.04.2014 | 17.04.2014 | 19.04.2014 | 18.04.2014 |
2 | Schmitz | | B | 16.04.2014 | | Schmitz | B | L | L | B |
3 | Müller | | R | 16.04.2014 | | Müller | R | Ü | XXXX | R |
4 | Schulze | | V | 16.04.2014 | | | | | Ü | |
5 | Müller | | Ü | 17.04.2014 | | Schulze | V | K | K | V |
6 | Schmitz | | L | 17.04.2014 | | | | | | |
7 | Schulze | | K | 17.04.2014 | | | | | | |
8 | Müller | | XXXX | 19.04.2014 | | | | | | |
9 | Müller | | R | 18.04.2014 | | | | | | |
10 | Schmitz | | B | 18.04.2014 | | | | | | |
11 | Schulze | | V | 18.04.2014 | | | | | | |
12 | Müller | | Ü | 19.04.2014 | | | | | | |
13 | Schmitz | | L | 19.04.2014 | | | | | | |
14 | Schulze | | K | 19.04.2014 | | | | | | |
Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Das Ergebnis wird erzeugt durch
Option Explicit
Sub Umorg_Kreuztab()
Dim zz As Long, arQ, oDicDat As Object, nn As Long, oDicKun As Object
Dim oDicK As Object, arKyDat, arKy, arIt, strK As String, arrE() ' As String
Const strT As String = "|#|"
With Sheets("Tabelle1")
zz = .Cells(.Rows.Count, 1).End(xlUp).Row
arQ = .Cells(2, 1).Resize(zz - 1, 4) ' Quelldaten
End With
Set oDicDat = CreateObject("Scripting.Dictionary")
For zz = 1 To UBound(arQ)
If Not oDicDat.Exists(arQ(zz, 4)) Then ' Quellspalte 4 wird Spaltenüb. (Datum)
nn = nn + 1
oDicDat(arQ(zz, 4)) = nn
End If
Next zz
arKyDat = oDicDat.Keys
Set oDicKun = CreateObject("Scripting.Dictionary")
For zz = 1 To UBound(arQ) ' Quellspalte 1 wird Zeilenkopf (Kundennamen)
strK = arQ(zz, 1) & strT & arQ(zz, 4)
oDicKun(strK) = oDicKun(strK) + 1 ' Liste und Anz. der Kombinationen
Next zz
arKy = oDicKun.Keys
arIt = oDicKun.Items
Set oDicK = CreateObject("Scripting.Dictionary")
For zz = 0 To oDicKun.Count - 1
strK = Split(arKy(zz), strT)(0) ' max. Anz/Kunde
If oDicK(strK)
Die Knr wird nicht verwendet. Wäre sie nicht geschickter als der Kundenname?
Wie sollte für dich die Darstellung sein, wenn ein Kunde an einem Tag mehrere Zahlungsarten hat?
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich