【问题标题】:Building a random name generator with no duplicates构建一个没有重复的随机名称生成器
【发布时间】:2018-07-25 19:36:11
【问题描述】:

我目前正在指派我组织的成员与其他观点成员会面。我有三个标准:

  1. 每个透视成员都必须与 6 个不同的当前成员会面
  2. 当前成员不能与同一个透视成员成员两次
  3. 配对必须是随机的

我已经在 Excel 中尝试了随机名称/数字生成器:

=INDEX($A:$A,RANDBETWEEN(1,COUNTA($A:$A)),1) 

...虽然有用,但它并不能确保每个视角都与 6 个不同的现任成员会面,或者不会确保每个视角都与某人会面两次。

我还添加了一个图表,我想红色是透视成员,蓝色是当前成员,绿色是我对配对进行排序的位置(基于当前成员)。

请帮助我,我完全不知道如何做到这一点。

【问题讨论】:

  • 随机排序左侧的列表(添加第二个 RND() 列并对其进行排序)。将该列表中的前六个分配给第一个预期,然后将 2-7 分配给下一个,依此类推。
  • "Random",根据定义,可能有也可能没有重复。以前值的零记忆。
  • 既然你已经标记了vba,我建议你创建一个名称数组并使用循环将顺序随机化到另一个数组中。
  • @ashleedawg 那会是什么样子?我是 VBA 初学者。
  • @aop - 好吧,你应该表明你至少尝试过自己做,我可以'不会引导您完成整个过程,但我会发布答案答案(在几分钟内),可以让您开始。 (只要记住“接受”一个答案!-更多关于here。)

标签: vba excel excel-formula excel-2007


【解决方案1】:

有多种方法可以随机化列表...

使用 VBA 随机化选择

使用 的一种方法是遍历工作表上选定(突出显示)的单元格,用单元格值(以随机顺序)填充数组,然后用数组值替换原始值:

Sub randomizeSelection()

    Dim arrOut() As String
    Dim x As Integer, n As Integer

    Randomize 'reseed random number generator

    With Selection '"Using the selected (highlighted) cells..."

        ReDim arrOut(1 To .Count) 'set array to same size as selection

        'make sure multiple cells are selected
        If .Count <= 1 Then
            MsgBox "Must select at least 2 cells to randomize."
            Exit Sub
        End If

        For x = 1 To .Count 'loop through selection
            Do
                n = Int(Rnd() * .Count) + 1 'pick random position in array
            Loop Until arrOut(n) = "" 'if position is 'occupied' then repeat loop

            arrOut(n) = .Item(x) 'store item in the new (random) position
        Next x

        'repopulate selection with items from [arrOut]
        For x = 1 To .Count
            .Item(x) = arrOut(x)
        Next x

    End With

End Sub

它适用于一维的选择:

,二维:

更多信息:


在没有 VBA 的情况下随机化工作表列表

随机化列表的另一种方法(没有 VBA) 是使用附加的(“帮助”)列或行,以及 Excel 的内置 排序 功能.

  1. 在要排序的列表相邻的列或行中,添加函数:

    =RAND()

    ...并将函数按原样“填充”(或复制和粘贴)到列表的长度。

  2. 突出显示列表添加的“辅助单元格”,然后按“辅助单元”排序。

请注意,此方法仅适用于 单个 列/行中的列表。要随机化二维列表中的单元格,请使用上述 VBA 方法。

垂直列表进行随机排序:

随机排序水平列表:


【讨论】:

  • @aop - 你明白了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-18
  • 1970-01-01
  • 2021-06-01
  • 2021-12-18
相关资源
最近更新 更多