29.03.2017, 12:29
Hallo Joshua,
hier meine Fassung korrigiert und mit Abfrage auf Spalte J:
Normalerweise müsste die Abfrage am Anfang sein. Aber dann müsste ich den Code insgesamt verändern.
Das würde bei großen Datenmengen auf jeden fall Sinn machen.
hier meine Fassung korrigiert und mit Abfrage auf Spalte J:
Code:
Sub ati_mach()
Dim i As Long
Dim gesBereich, b1Bereich, b2Bereich
Dim b1vonD1, b2vonD2
Dim varKA
Dim D1 As Object, D1A As Object
Dim D2 As Object, D2A As Object
Set D1 = CreateObject("Scripting.Dictionary")
Set D1A = CreateObject("Scripting.Dictionary")
Set D2 = CreateObject("Scripting.Dictionary")
Set D2A = CreateObject("Scripting.Dictionary")
gesBereich = Sheets("Tabelle1").Range("B2:J30")
For i = 1 To UBound(gesBereich)
varKA = gesBereich(i, 1)
If gesBereich(i, 1) = varKA Then
If CDbl(gesBereich(i, 3) & gesBereich(i, 4)) > D1(varKA) Then
D1(varKA) = CDbl(gesBereich(i, 3) & gesBereich(i, 4))
D1A(varKA) = gesBereich(i, 3) & " " & gesBereich(i, 4)
End If
If CDbl(gesBereich(i, 3) & gesBereich(i, 9)) > D2(varKA) Then
D2(varKA) = CDbl(gesBereich(i, 3) & gesBereich(i, 9))
D2A(varKA) = gesBereich(i, 3) & " " & gesBereich(i, 9)
End If
End If
Next i
With Sheets("Tabelle2").Range("C4:G8")
.ClearContents
b1Bereich = .Value
For Each varKA In D2A.keys
b1Bereich(Split(D1A(varKA))(0), Split(D1A(varKA))(1)) = b1Bereich(Split(D1A(varKA))(0), Split(D1A(varKA))(1)) + 1
Next
.Value = b1Bereich
End With
If Application.Count(Application.Index(Application.Transpose(gesBereich), 9)) > 0 Then
With Sheets("Tabelle2").Range("J4:N8")
.ClearContents
b2Bereich = .Value
For Each varKA In D2A.keys
b2Bereich(Split(D2A(varKA))(0), Split(D2A(varKA))(1)) = b2Bereich(Split(D2A(varKA))(0), Split(D2A(varKA))(1)) + 1
Next
.Value = b2Bereich
End With
End If
End Sub
Normalerweise müsste die Abfrage am Anfang sein. Aber dann müsste ich den Code insgesamt verändern.
Das würde bei großen Datenmengen auf jeden fall Sinn machen.
Gruß Atilla