如何使用Excel / VBA将已知的数字组随机分配到列中

时间:2015-07-07 09:27:41

标签: excel vba excel-vba random

我坚持使用excel / vba:

我在Excel中有一个10行x 30列空白数组。我试图从一个已知的10个组(比如1,1,1,1,1,1,3,5,7,9)中随机分配10个整数到每列中,以便列的每一行包含一个组(并且所有组成员都使用一次),我需要第二列包含同一组的另一个随机分布,依此类推。

所以我最终会得到30列,每列10行,每列包含相同10个整数的不同随机分布。我希望能够通过重新计算电子表格来更改每行的分布。

有快速的方法吗?如果没有排列30个不同的rand()排序列表并使用查找,我就看不到任何方法。我对VBA不够精明。如果有人能指出我正确的方向,我将永远感激不尽!

2 个答案:

答案 0 :(得分:0)

您可以创建一个循环,在其中使用10个数字创建数组。然后循环30列,首先将10个随机抽取数字的另一列添加到数组中。见this website on how to draw random numbers。然后对第二列上的数组进行排序并发布第一列。

编辑:

正如我在其他答案的评论中所读到的那样,纯粹的解决方案是:

  1. 为值的每个唯一选项指定一个随机值
  2. 从上到下或从下到上对这些随机值进行排序,然后选择最上面的值。
  3. 将其放在第一行
  4. 对第二行再次执行相同的操作,但要跟踪所有唯一选项的总和,以便在最大限度地显示选项后排除选项。
  5. EDIT2:

    一旦我点击帖子,我就会更多地思考这个问题并得出结论,在这种情况下,最后一位数字总是为1 ....

答案 1 :(得分:0)

也许我错过了一些明显的东西,尽管单独使用工作表公式似乎并不那么简单。

如果您的原始值列表在A1:A10中,则在B1:

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

,在B2中,数组公式**

=INDEX($A$1:$A$10,INDEX(MODE.MULT(IF(COUNTIF($A$1:$A$10,$A$1:$A$10)-COUNTIF(B$1:B1,$A$1:$A$10),{1,1}*ROW($A$1:$A$10))),RANDBETWEEN(1,10-ROWS($1:1))))

将上述内容复制到B10。

然后,您可以根据需要将B1:B10中的公式复制到右侧。

此致

**数组公式的输入方式与“标准”公式的输入方式不同。您只需按住CTRL和SHIFT键,然后按ENTER键,而不是按ENTER键。如果你已经正确地完成了它,你会注意到Excel在公式周围放置了大括号{}(虽然不要尝试自己手动插入这些)。