View Full Version : Array Shuffler


ajetrumpet
09-28-2008, 10:23 PM
Below is some code that I wrote to shuffle arrays. The first block deals with one-dimensionals, and the second deals with two-dimensionals. I have written the code for pre-defined arrays rather than dynamic ones, but it works for both types:

1 dimensionFunction ArrayShuffler1()

Dim i As Integer
Dim j As Integer
Dim int1 As Integer
Dim int2 As Integer
Dim strVAR As String
Dim var(10) As Variant

For i = LBound(var) To UBound(var)

var(i) = i
Debug.Print var(i)

Next i

Debug.Print vbCr

Randomize

For i = LBound(var) To UBound(var)

int1 = Int(Rnd * (UBound(var) - LBound(var) + 1))
int2 = Int(Rnd * (UBound(var) - LBound(var) + 1))

While int1 = int2
int2 = Int(Rnd * (UBound(var) - LBound(var) + 1))
Wend

strVAR = var(int1)
var(int1) = var(int2)
var(int2) = strVAR

Next i

Debug.Print vbCr

For i = LBound(var) To UBound(var)

Debug.Print var(i)

Next i

End Function

2 dimensionsFunction ArrayShuffler2()

Dim i As Integer
Dim j As Integer
Dim int1 As Integer
Dim int2 As Integer
Dim strOLD As String
Dim strNEW As String
Dim strVAR As String
Dim var(5, 9) As Variant

strOLD = ""
strNEW = ""

For i = LBound(var, 2) To UBound(var, 2)

For j = LBound(var, 1) To UBound(var, 1)
var(j, i) = j & "," & i
strOLD = strOLD & var(j, i) & " "
Next j

Debug.Print strOLD
strOLD = ""

Next i

Randomize

For i = LBound(var, 2) To UBound(var, 2)

int1 = Int(Rnd * (UBound(var, 2) - LBound(var, 2) + 1))
int2 = Int(Rnd * (UBound(var, 2) - LBound(var, 2) + 1))

While int1 = int2
int2 = Int(Rnd * (UBound(var, 2) - LBound(var, 2) + 1))
Wend

For j = LBound(var, 1) To UBound(var, 1)

strVAR = var(j, int1)
var(j, int1) = var(j, int2)
var(j, int2) = strVAR

Next j

Next i

Debug.Print vbCr

For i = LBound(var, 2) To UBound(var, 2)

For j = LBound(var, 1) To UBound(var, 1)
strNEW = strNEW & var(j, i) & " "
Next j

Debug.Print strNEW
strNEW = ""

Next i

End Function