我想使用Excel生成随机实验室合作伙伴列表,而不使用VB(由于PC上的安全设置)。
参数如下:
学生人数:10-30,每个所需总数一张工作表 合作伙伴数量:前两个实验室中有三个,另外四个中有两个。 实验室站数:10 重复:理想情况下没有,但允许学生从前两个实验室中的一个获得重复伴侣。 Excel版本:2007
为了澄清,每个学生将有两个实验室,他们与另外两名学生共用一个实验室,实验室最大为30名学生。之后,他们将严格限制在每个站两名学生,最多20名学生。每个学生将有四个这样的有限实验室,总共有五个这样的实验室,允许奇数编号的班级,或21-30岁的班级。
每个学生的编号都是1-30,所以一个单元可以,例如,状态" 5,24"作为该实验室的两名学生。
真正的RNG并不重要,事实上,只需执行一次即可制作这些矩阵。
答案 0 :(得分:0)
我认为在不使用VBA的情况下这有点棘手,但这里有一种方法可以适用于小组。我尝试使用一组只有九个,以便屏幕截图可读。
该方法是基本的Fisher-Yates
A Start with a group of students size n represented by a list of numbers 1 to n.
B Generate a random number r in range 1 to n
C Pick the rth element from the list
D Remove the rth element from the list
E Reduce n by 1
F Repeat from B until n=1.
在Excel中: -
填充A2:A10和D2:L2,编号为1-9
将以下内容放入B2并下拉: -
=RANDBETWEEN(1,10-A2)
将其放入C2并下拉: -
=OFFSET(D2,0,B2-1)
将它放在D3中并向下拉: -
=IF(D2>=$C2,E2,D2)
ID将在C列中,因此前三个将在第1组中,后三个在第2组中等。
顺便说一下,你的问题是生成非重复随机数的一个特例 - 见
Generating unique random numbers without VBA
此处描述的数组公式只需一步即可完成 - 对此问题略有修改,看起来像
=SMALL(IF(COUNTIF(C$1:C1,ROW(INDIRECT("1:9")))=0,ROW(INDIRECT("1:9"))),RANDBETWEEN(1,(9-ROWS(C$2:C2)+1)))