首页 > 解决方案 > 分配等值随机

问题描述

我正在寻找一种方法来做到这一点......

我有一些活动,我需要分发它(15 人 900 次活动),但它必须是等量随机的,我找到了一种随机分发的方法,但它不是等量的。

比我用的公式

=INDEX(A2:A16,RANDBETWEEN(1,COUNTA(A2:A16))

结果不公平

person 1    93
person 2    86
person 3    86
person 4    93
person 5    100
person 6    115
person 7    111
person 8    48
person 9    42
person 10   34
person 11   42
person 12   60

有一种方法可以更公平,因为例如第 7 个人比第 10 个人有更多的活动?

标签: excelvba

解决方案


试试这个:

Sub croupier()
    Dim i As Long, wf As WorksheetFunction
    Dim cell As Range

    Set wf = Application.WorksheetFunction

    For i = 1 To 900
        Set cell = Range("B" & wf.RandBetween(1, 15))
        cell.Value = cell.Value + 1
    Next i
End Sub

典型结果:

在此处输入图像描述

该过程是:

  1. 随机选择B1B15之间的单元格
  2. 将单元格的值加一

该过程重复 900 次。

编辑#1:

宏非常易于安装和使用:

  1. ALT-F11 调出 VBE 窗口
  2. ALT-I ALT-M 打开一个新模块
  3. 粘贴这些东西并关闭 VBE 窗口

如果您保存工作簿,宏将与它一起保存。如果您使用的是 2003 年以后的 Excel 版本,则必须将文件另存为 .xlsm 而不是 .xlsx

删除宏:

  1. 如上所述调出 VBE 窗口
  2. 清除代码
  3. 关闭 VBE 窗口

使用Excel 窗口中的宏:

  1. ALT-F8
  2. 选择宏
  3. 轻触运行

要了解有关宏的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

必须启用宏才能使其正常工作!


推荐阅读