I implemented my own sorting in VBA because it doesn't provide its own, and it's healthy to test yourself. It was surprisingly difficult and I ended up make a few tweaks that I didn't expect to make in order for it to sort.
Public Sub quicksort(ByRef arr As Variant, _
ByVal left As Integer, _
ByVal right As Integer)
If right <= left Then Exit Sub ' length == 1 already sorted
'swap pivot it to end. I'm not yet concerned about pivot selection
Call swap(arr(CInt((left + right) \ 2)), arr(right))
Dim r As Integer: r = right ' include the pivot in case it's the greatest value
Dim l As Integer: l = left
Dim p As Variant: p = arr(right) ' again pivot is at the end
While l < r
While arr(l) < p And l < r
l = l + 1
Wend
While arr(r) >= p And l < r ' Right claims values which equal pivot
r = r - 1
Wend
If l <> r Then Call swap(arr(l), arr(r))
Wend
' Don't swap the same thing
If l <> right Then Call swap(arr(right), arr(l))
Call quicksort(arr, left, l - 1)
Call quicksort(arr, l + 1, right)
End Sub