Shuffle Array
This page describes code to shuffle an array into random order.
In various applications, you may find in useful or necessary to randomize an array. That is,
to reorder the elements in random order. This page describes to VBA procedures to do this. The
first procedure, ShuffleArray, takes an input array and returns a new
array containing the elements of the input array in random order. The contents and order of the
input array are not modified. The second procedure, ShuffleArrayInPlace,
randomizes an input array, modifying the contents and order of the input array. This procedure does
not return a value.
The code for both procedures is shown below. You can download a module file here.
Function ShuffleArray(InArray() As Variant) As Variant()
Dim N As Long
Dim Temp As Variant
Dim J As Long
Dim Arr() As Variant
Randomize
L = UBound(InArray) - LBound(InArray) + 1
ReDim Arr(LBound(InArray) To UBound(InArray))
For N = LBound(InArray) To UBound(InArray)
Arr(N) = InArray(N)
Next N
For N = LBound(InArray) To UBound(InArray)
J = CLng(((UBound(InArray) - N) * Rnd) + N)
Temp = Arr(N)
Arr(N) = ARr(J)
Arr(J) = Temp
Next N
ShuffleArray = Arr
End Function
Sub ShuffleArrayInPlace(InArray() As Variant)
Dim N As Long
Dim Temp As Variant
Dim J As Long
Randomize
For N = LBound(InArray) To UBound(InArray)
J = CLng(((UBound(InArray) - N) * Rnd) + N)
If N <> J Then
Temp = InArray(N)
InArray(N) = InArray(J)
InArray(J) = Temp
End If
Next N
End Sub
You can download a module file here.
This page last updated: 31-July-2008