Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA多米诺骨牌团队随机选择_Excel_Vba - Fatal编程技术网

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问题来使用。我如何添加到目前为止的代码?单击问题左下角的“编辑”链接,然后只粘贴您的代码(然后突出显示它并按下“{}”按钮-但是如果您没有正确理解,其他人可以为您这样做)。并在问题中包括为什么代码没有达到您期望的效果。