Attribute VB_Name = "z_QuickSort" Option Explicit Public Function QuickSort(ByRef ids() As Variant, ByVal low&, ByVal high&, values As Collection) Do While low < high Dim pivot&: pivot = QPartition(ids, low, high, values) Call QuickSort(ids, low, pivot - 1, values) low = pivot + 1 Loop End Function Private Function QPartition(ByRef ids() As Variant, low&, high&, values As Collection) As Long Dim pivot As Variant: pivot = ids(high) Dim smallest&: smallest = low - 1 Dim n& Dim tmp$ For n = low To high - 1 If values(CStr(ids(n))) < values(CStr(pivot)) Then smallest = smallest + 1 tmp = ids(smallest) ids(smallest) = ids(n) ids(n) = tmp End If Next n smallest = smallest + 1 tmp = ids(smallest) ids(smallest) = ids(high) ids(high) = tmp QPartition = smallest End Function