私は、複数のチームの名前を入力するためのワークブックと、関連する審査員(チームごとに2人)を作成しますチームの無作為化されたリストと多数のラウンドの審査員。Excel VBA乱数使用時に異なる列の重複値を避ける
私が抱えている問題は、裁判官が自分のチームを判断するのを避けたいということです。
ここではブック全体を説明するのではなく、同じことをする簡単なバージョンを作成しました。サブルーチンは次の通りです:generateRandNum:セルA1:A5に重複のない乱数のリストを生成します。次にVLOOKUP関数を使用して、セルB1:B5の各番号に関連するチーム名を割り当てます。 T20:T11細胞における10名のリストの横S20:
Public Sub generateRandNum()
lowerbound = 1
upperbound = 5
Set randomrange = Range("A1:A5")
randomrange.Clear
For Each rng1 In randomrange
counter = counter + 1
Next
If counter > upperbound - lowerbound + 1 Then
MsgBox ("Number of cells > number of unique random numbers")
Exit Sub
End If
For Each Rng In randomrange
randnum = Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
Do While Application.WorksheetFunction.CountIf(randomrange, randnum) >= 1
randnum = Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
Loop
Rng.Value = randnum
Next
End Sub
generateRandJudge細胞S11において重複することなく別の乱数リストを生成します。
Public Sub generateRandJudge()
lowerbound = 1
upperbound = 10
Set randomrange = Range("s11:s20")
randomrange.Clear
For Each rng1 In randomrange
counter = counter + 1
Next
If counter > upperbound - lowerbound + 1 Then
MsgBox ("Number of cells > number of unique random numbers")
Exit Sub
End If
For Each Rng In randomrange
randnum = Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
Do While Application.WorksheetFunction.CountIf(randomrange, randnum) >= 1
randnum = Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
Loop
Rng.Value = randnum
Next
End Sub
VLOOKUPを使用して、再び、私は名前の無作為化リストを取得し、細胞(奇数)D1にペアでそれらを配置:D5と(さえ)F1:セルE1に各裁判官に関連したチームとF5、:E5 G1:G5とする。
私は自分のチームを判断する人を避けたいので
は、私は次のように含まれるセル内の関数H1 IF:H5= IF(OR(E1 = B1、G1 = B1)、1,0)
ユーザーがのみ生成されるランダムなリストについては、ボタンを押す必要があるようには、私はその後、別のサブを作成:
Sub Main()
Call generateRandNum
Call generateRandJudge
'Check Judge values against Team values to avoid duplicates
Dim i As Long
For i = 1 To Rows.Count
Next i
If Cells(i, 8).Value = 1 Then
Call generateRandNum
End If
End Sub
サブメイン()の最初の部分は正常に動作しますが、最後の部分はしていません、次の行にエラーが表示されます。
If Cells(i, 8).Value = 1 Then
私がしたいことは、セルH1:H5の値をループして1に等しい値があれば、重複がなくなるまで別のランダムなチーム番号を生成して停止するということでした。
私は誰かがこれよりはるかに洗練された解決策を持っていると思っています。誰でも助けてくれますか?