Forum Discussion
Dantheman348
Jan 01, 2025Copper Contributor
Special sort required
I have a column of 8 numbers. I want to scramble these numbers so no 2 numbers repeat themselves, through 4 columns. The 4 columns represent 4 games to be played. The two numbers together repersent h...
NikolinoDE
Jan 04, 2025Platinum Contributor
Attached is an attempt with VBA. Backup your file first before you using the Code. The code is untested.
Sub ScrambleTeams()
Dim Teams As Variant
Dim i As Integer, j As Integer
Dim Games(1 To 4, 1 To 8) As Integer ' 4 Games, 8 Numbers
Dim UsedNumbers As Object
Dim RowOffset As Integer
Dim RandomIndex As Integer
Dim Temp As Integer
' Define the team numbers (adjust as needed)
Teams = Array(1, 2, 3, 4, 5, 6, 7, 8) ' Adjust for 16 if needed
' Shuffle the teams randomly
For i = UBound(Teams) To 1 Step -1
RandomIndex = Int((i + 1) * Rnd)
Temp = Teams(i)
Teams(i) = Teams(RandomIndex)
Teams(RandomIndex) = Temp
Next i
' Create unique pairings for 4 rounds (rows)
Set UsedNumbers = CreateObject("Scripting.Dictionary")
For i = 1 To 4 ' 4 games
UsedNumbers.RemoveAll ' Clear previous round's numbers
RowOffset = (i - 1) * 2 ' Shift by 2 rows for each game
j = 0
Do While j < 8
RandomIndex = Int((UBound(Teams) + 1) * Rnd) ' Get a random index
If Not UsedNumbers.exists(Teams(RandomIndex)) Then
Games(i, j + 1) = Teams(RandomIndex)
UsedNumbers.Add Teams(RandomIndex), True
j = j + 1
End If
Loop
Next i
' Output results to Sheet1 (adjust as needed)
With Sheets("Sheet1")
.Range("A1:H4").ClearContents ' Clear old data
For i = 1 To 4
For j = 1 To 8
.Cells(i, j).Value = Games(i, j)
Next j
Next i
End With
MsgBox "Teams Scrambled Successfully!", vbInformation
End SubMy answers are voluntary and without guarantee!
Hope this will help you.
Happy Excel-ing!