Yes. If you had said so after I asked in post #2, it would have saved a lot of time.
Sub Test_RndIntPick() MsgBox Join(RndIntPick(1, 100, 3), vbLf)
MsgBox Join(RndIntPick(1, 100, 3, True, True), vbLf)
MsgBox Join(RndIntPick(1, 100, 3, True, False), vbLf)
End Sub
Function RndIntPick(first As Long, last As Long, _
noPick As Long, Optional bSort As Boolean = False, _
Optional bAscending As Boolean = True) As Variant
Dim i As Long, r As Long, temp As Long, k As Long
ReDim iArr(first To last) As Variant
Dim a() As Variant
For i = first To last
iArr(i) = i
Next i
Randomize
For i = 1 To noPick
r = Int(Rnd() * (last - first + 1 - (i - 1))) + (first + (i - 1))
temp = iArr(r)
iArr(r) = iArr(first + i - 1)
iArr(first + i - 1) = temp
Next i
ReDim Preserve iArr(first To first + noPick - 1)
ReDim a(1 To noPick)
For r = 1 To noPick
a(r) = iArr(LBound(iArr) + r - 1)
Next r
If bSort = True Then
RndIntPick = ArrayListSort(a(), bAscending)
Else
RndIntPick = a()
End If
End Function
Function ArrayListSort(sn As Variant, Optional bAscending As Boolean = True)
With CreateObject("System.Collections.ArrayList")
Dim cl As Variant
For Each cl In sn
.Add cl
Next
.Sort 'Sort ascendending
If bAscending = False Then .Reverse 'Sort and then Reverse to sort descending
ArrayListSort = .toarray()
End With
End Function