Excel VBA多米诺骨牌团队随机选择
我是新手,需要帮助创建宏。目标是从名单中随机选择多米诺骨牌比赛的搭档 详细信息:Excel VBA多米诺骨牌团队随机选择,excel,vba,Excel,Vba,我是新手,需要帮助创建宏。目标是从名单中随机选择多米诺骨牌比赛的搭档 详细信息: 我将有一个球员名单列在“B”,每天可能有不同数量的球员和不同的名字。在“A”列中,这些玩家将有一个唯一的号码。宏应该将这些玩家成对组合,这些搭档将与随机选择的另一对搭档对抗。我将在一个单元格中指定每个玩家在那天玩多少次。制约因素包括: 在使用所有组合之前,任何两名球员都不应第二次在同一支球队中一起比赛,以此类推 在所有组合使用完毕之前,任何两支相同的球队不得进行第二次比赛 我需要从宏返回的是 D列:第1队(球员1
我将有一个球员名单列在“B”,每天可能有不同数量的球员和不同的名字。在“A”列中,这些玩家将有一个唯一的号码。宏应该将这些玩家成对组合,这些搭档将与随机选择的另一对搭档对抗。我将在一个单元格中指定每个玩家在那天玩多少次。制约因素包括:
- D列:第1队(球员1号)李>
- E列:第1队(球员2号)李>
- F列:第2队(球员1号)李>
- G列:第2队(球员2号)李>
vlookup
从主列表中获取名称。每一行将是不同的匹配。例如,如果我有8名球员,每名球员将参加5次比赛,那么在比赛结束时,我应该有10行比赛:
8 players x 5 games per player = 40 / 4 players each match = 10
如果你有任何问题,请告诉我,
谢谢
这是我目前掌握的代码:
Sub SelectRandomPlayers()
Dim players() As String, selectedPlayers(3) As String
Dim playerRange As Range
Dim i As Long, c As Long, writeRow As Long, ub As Long, selectedIndex As Long, j As Long, ub2 As Long
writeRow = 2
Set playerRange = Range(Range("A2"), Range("A2").End(xlDown))
c = playerRange.count
ub = c - 1
ReDim players(ub)
For i = 0 To ub
players(i) = playerRange.Cells(i + 1).Value2
Next i
Do
For i = 0 To 3
ub2 = UBound(players)
selectedIndex = WorksheetFunction.RandBetween(0, ub2)
selectedPlayers(i) = players(selectedIndex)
For j = selectedIndex To ub2
If j < ub2 Then players(j) = players(j + 1)
Next j
If ub2 > 0 Then ReDim Preserve players(ub2 - 1)
Next i
Range("D" & writeRow).Value2 = selectedPlayers(0)
Range("E" & writeRow).Value2 = selectedPlayers(1)
Range("F" & writeRow).Value2 = selectedPlayers(2)
Range("G" & writeRow).Value2 = selectedPlayers(3)
writeRow = writeRow + 1
Loop While UBound(players) > 0
End Sub
Sub-selectRandomPlayer()
Dim players()作为字符串,Selected players(3)作为字符串
昏暗的游乐场
Dim i为长,c为长,writeRow为长,ub为长,selectedIndex为长,j为长,ub2为长
writeRow=2
设置播放距离=范围(范围(“A2”)、范围(“A2”)。结束(xlDown))
c=游戏差事数
ub=c-1
重播播放器(ub)
对于i=0到ub
玩家(i)=游侠。单元格(i+1)。值2
接下来我
做
对于i=0到3
ub2=UBound(玩家)
selectedIndex=WorksheetFunction.randbween(0,ub2)
SelectedPlayer(i)=玩家(selectedIndex)
对于j=已选择ub2的索引
如果j0,则重拨保留玩家(ub2-1)
接下来我
范围(“D”和writeRow).Value2=selectedPlayers(0)
范围(“E”和writeRow).Value2=selectedPlayers(1)
范围(“F”和writeRow).Value2=所选播放器(2)
范围(“G”和writeRow).Value2=selectedPlayers(3)
writeRow=writeRow+1
在UBound时循环(玩家)>0
端接头
我仍然不知道如何更改它,以便每个玩家可以有多个比赛,并遵守限制。编写宏的哪一部分有问题?整个过程。谢谢。在这种情况下,我担心这个问题“太广泛”了,不能作为一个SO问题来使用。我如何添加到目前为止的代码?单击问题左下角的“编辑”链接,然后只粘贴您的代码(然后突出显示它并按下“{}”按钮-但是如果您没有正确理解,其他人可以为您这样做)。并在问题中包括为什么代码没有达到您期望的效果。