Datenkombinationen analysieren
26.09.2013 09:46:38
Erich
Hi Daniel,
hier zwei Varianten. Die kurze verlässt sich etwas stärker darauf, dass die Quelldaten "passen".
Probier mal:
Option Explicit
Sub Dict_Pruefe_12()
Dim lngQ As Long, arQ, oDic As Object, strK As String, arI
Dim qq As Long, zz As Long, arA
With Sheets("Tabelle1") ' Quelldaten
lngQ = .Cells(1, 1).CurrentRegion.Rows.Count
arQ = .Cells(1, 1).Resize(lngQ, 3) ' Sp. A:C
End With
Set oDic = CreateObject("Scripting.Dictionary")
For qq = 1 To lngQ
strK = arQ(qq, 1) & "x" & arQ(qq, 2)
oDic(strK) = oDic(strK) & arQ(qq, 3)
Next
With Sheets("Tabelle1") ' Ausgabe in Zielblatt
arQ = oDic.Keys
arI = oDic.Items
zz = lngQ + 6
For qq = 0 To oDic.Count - 1
If Not (arI(qq) = "12" Or arI(qq) = "21") Then
arA = Split(arQ(qq), "x")
zz = zz + 1
.Cells(zz, 1) = 0 + arA(0)
.Cells(zz, 2) = 0 + arA(1)
.Cells(zz, 3) = 3 - arI(qq)
End If
Next qq
End With
End Sub
Sub Dict_Pruefe_12_lang()
Dim lngQ As Long, arQ, oDic As Object, strK As String, arI
Dim qq As Long, zz As Long, arA
With Sheets("Tabelle1") ' Quelldaten
lngQ = .Cells(1, 1).CurrentRegion.Rows.Count
arQ = .Cells(1, 1).Resize(lngQ, 3) ' Sp. A:C
End With
Set oDic = CreateObject("Scripting.Dictionary")
For qq = 1 To lngQ
strK = arQ(qq, 1) & "x" & arQ(qq, 2)
If Trim(arQ(qq, 3)) = "" Then arQ(qq, 3) = "#"
If oDic.Exists(strK) Then ' schon da?
oDic(strK) = oDic(strK) & arQ(qq, 3)
Else ' neuer Eintrag
oDic.Add strK, arQ(qq, 3)
End If
Next
With Sheets("Tabelle1") ' Ausgabe in Zielblatt
arQ = oDic.Keys
arI = oDic.Items
zz = lngQ + 6
For qq = 0 To oDic.Count - 1
If Not (arI(qq) = "12" Or arI(qq) = "21") Then
arA = Split(arQ(qq), "x")
zz = zz + 1
.Cells(zz, 1) = 0 + arA(0)
.Cells(zz, 2) = 0 + arA(1)
If arI(qq) = "1" Or arI(qq) = "2" Then
.Cells(zz, 3) = 3 - arI(qq)
Else
.Cells(zz, 3) = "vorh: " & arI(qq)
End If
End If
Next qq
End With
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich