Option
Explicit
Function
AnzahlAufträge(Daten
As
Range, Art
As
String
)
Dim
cnt
As
Integer
Dim
iRow
As
Integer
Dim
arData
As
Variant
Dim
tmpAuftrag
As
String
arData = Daten.Value
QuickSortArray SortArray:=arData, lngColumn:=2
For
iRow = LBound(arData, 1)
To
UBound(arData, 1)
If
arData(iRow, 2) = Art
Then
If
Not
arData(iRow, 1) = tmpAuftrag
Then
cnt = cnt + 1
tmpAuftrag = arData(iRow, 1)
End
If
End
If
Next
AnzahlAufträge = cnt
End
Function
Public
Sub
QuickSortArray(
ByRef
SortArray
As
Variant
,
Optional
lngMin
As
Long
= -1,
Optional
lngMax
As
Long
= -1,
Optional
lngColumn
As
Long
= 0)
On
Error
Resume
Next
Dim
i
As
Long
Dim
j
As
Long
Dim
varMid
As
Variant
Dim
arrRowTemp
As
Variant
Dim
lngColTemp
As
Long
If
IsEmpty(SortArray)
Then
Exit
Sub
End
If
If
InStr(TypeName(SortArray),
"()"
) < 1
Then
Exit
Sub
End
If
If
lngMin = -1
Then
lngMin = LBound(SortArray, 1)
End
If
If
lngMax = -1
Then
lngMax = UBound(SortArray, 1)
End
If
If
lngMin >= lngMax
Then
Exit
Sub
End
If
i = lngMin
j = lngMax
varMid = Empty
varMid = SortArray((lngMin + lngMax) \ 2, lngColumn)
If
IsObject(varMid)
Then
i = lngMax
j = lngMin
ElseIf
IsEmpty(varMid)
Then
i = lngMax
j = lngMin
ElseIf
IsNull(varMid)
Then
i = lngMax
j = lngMin
ElseIf
varMid =
""
Then
i = lngMax
j = lngMin
ElseIf
VarType(varMid) = vbError
Then
i = lngMax
j = lngMin
ElseIf
VarType(varMid) > 17
Then
i = lngMax
j = lngMin
End
If
While
i <= j
While
SortArray(i, lngColumn) < varMid
And
i < lngMax
i = i + 1
Wend
While
varMid < SortArray(j, lngColumn)
And
j > lngMin
j = j - 1
Wend
If
i <= j
Then
ReDim
arrRowTemp(LBound(SortArray, 2)
To
UBound(SortArray, 2))
For
lngColTemp = LBound(SortArray, 2)
To
UBound(SortArray, 2)
arrRowTemp(lngColTemp) = SortArray(i, lngColTemp)
SortArray(i, lngColTemp) = SortArray(j, lngColTemp)
SortArray(j, lngColTemp) = arrRowTemp(lngColTemp)
Next
lngColTemp
Erase
arrRowTemp
i = i + 1
j = j - 1
End
If
Wend
If
(lngMin < j)
Then
Call
QuickSortArray(SortArray, lngMin, j, lngColumn)
If
(i < lngMax)
Then
Call
QuickSortArray(SortArray, i, lngMax, lngColumn)
End
Sub