Table of contents
本教程主要介绍如何在Excel中进行无重复的随机抽样。 你会发现Excel 365、Excel 2021、Excel 2019和早期版本的解决方案。
前段时间,我们介绍了一些在Excel中进行随机选择的不同方法。 这些解决方案大多依赖于RAND和RANDBETWEEN函数,这些函数可能会产生重复的数字。 因此,你的随机样本可能包含重复的值。 如果你需要一个没有重复的随机选择,那么就使用本教程中描述的方法。
Excel从列表中随机选择,没有重复的内容
只在支持动态数组的Excel 365和Excel 2021中工作。
要从一个没有重复的列表中进行随机选择,请使用这个通用公式。
INDEX(SORTBY( 数据 , randarray(rows( 数据 )), SEQUENCE( n ))在哪里? n 是所需的选择尺寸。
例如,要从A2:A10的列表中获得5个独特的随机名字,这里是要使用的公式。
=index(sortby(a2:a10, randarray(rows(a2:a10)), sequence(5))
为了方便起见,你可以在一个预定义的单元格(如C2)中输入样本量,并向SEQUENCE函数提供该单元格的参考。
=index(sortby(a2:a10, randarray(rows(a2:a10)), sequence(c2))
这个公式如何运作。
下面是对该公式逻辑的高级解释:RANDARRAY函数创建了一个随机数的数组,SORTBY按这些数字对原始值进行排序,INDEX检索SEQUENCE指定的多少个值。
下面是详细的分类。
ROWS函数计算你的数据集包含多少行,并将该计数传递给RANDARRAY函数,这样它就可以生成相同数量的随机小数。
randarray(rows(a2:c10))
这个随机小数数组被SORTBY函数用作 "排序 "数组。 结果,你的原始数据被随机地洗牌。
从随机排序的数据中,你提取一个特定大小的样本。 为此,你向INDEX函数提供洗牌后的数组,并要求检索第一个 N 值在SEQUENCE函数的帮助下,产生一个从1到2的数字序列。 N 因为原始数据已经按随机顺序排序,我们并不关心要检索哪些位置,只关心数量。
在Excel中选择没有重复的随机行
只在支持动态数组的Excel 365和Excel 2021中工作。
要选择没有重复的随机行,可以这样建立一个公式。
INDEX(SORTBY( 数据 , randarray(rows( 数据 )), SEQUENCE( n ), {1,2,...})在哪里? n 是样本大小,{1,2,...}是要提取的列号。
作为一个例子,让我们从A2:C10中选择没有重复条目的随机行,基于F1中的样本量。 由于我们的数据是3列,我们向公式提供这个数组常数:{1,2,3}。
=index(sortby(a2:c10, randarray(rows(a2:c10)), sequence(f1), {1,2,3})
并得到以下结果。
这个公式如何运作。
该公式的工作逻辑与之前的公式完全相同。 一个小的变化带来了很大的不同,就是你同时指定了 行数_num 和 列_num INDEX函数的参数。 行数_num 是由SEQUENCE提供的,而 列_num 由阵列常数决定。
如何在Excel 2010中进行随机抽样 - 2019年
由于只有Excel for Microsoft 365和Excel 2021支持动态数组,前面例子中使用的动态数组函数只能在Excel 365中使用。 对于其他版本,你必须制定一个不同的解决方案。
假设你想从A2:A10的列表中随机选择,这可以用两个单独的公式来完成。
- 用Rand公式生成随机数。 在我们的例子中,我们在B2中输入,然后向下复制到B10。
=RAND()
- 用下面的公式提取第一个随机值,你在E2中输入这个公式。
=index($a$2:$a$10, rank.eq(b2, $b$2:$b$10) + countif($b$2:b2, b2) - 1)
- 将上述公式复制到你想挑选的任意数量的单元格中。 在这个例子中,我们想要4个名字,所以我们从E2到E5复制这个公式。
完成了!我们没有重复的随机样本看起来如下。
这个公式如何运作。
和第一个例子一样,你使用INDEX函数从A列中根据随机行号检索数值。 不同的是你如何获得这些数字。
RAND函数用随机小数填充B2:B10的范围。
RANK.EQ函数计算一个随机数在指定行中的排名。 例如,在E2中,RANK.EQ(B2, $B$2:$B$10)将B2中的数字与B2:B10中的所有数字进行排名。 当复制到E3时,相对引用B2变为B3,并返回B3中数字的排名,以此类推。
COUNTIF函数找出上述单元格中给定数字的出现次数。 例如,在E2中,COUNTIF($B$2:B2, B2)只检查一个单元格--B2本身,并返回1。在E5中,公式变为COUNTIF($B$2:B5, B5)并返回2,因为B5包含与B2相同的值(请注意,这只是为了更好地解释公式的逻辑;在一个小数据集中,有可能得到重复的随机数接近于零)。
结果是,对于所有第1次出现的情况,COUNTIF返回1,从中减去1以保持原来的排名。 对于第2次出现的情况,COUNTIF返回2。 通过减去1,你的排名增加了1,从而防止重复排名。
例如,对于B2,RANK.EQ返回1,由于这是第一次出现,COUNTIF也返回1,RANK.EQ+COUNTIF得到2,而-1恢复了等级1。
现在,看看在第二次出现的情况下会发生什么。 对于B5,RANK.EQ也返回1,而COUNTIF返回2。 将这些相加得到3,从中减去1,作为最终结果,你得到2,这代表B5中数字的等级。
级别到了 行数_num 的参数,并从相应的行中选取数值(即 列_num 参数被省略,所以默认为1)。 这就是为什么避免重复排名如此重要的原因。 如果没有COUNTIF函数,RANK.EQ会对B2和B5都产生1,导致INDEX两次返回第一行的值(Andrew)。
如何防止Excel随机样本变化
由于Excel中的所有随机化函数,如RAND、RANDBETWEEN和RANDARRAY都是不稳定的,它们会随着工作表中的每一个变化而重新计算。 因此,你的随机样本会不断变化。 为了防止这种情况发生,请使用粘贴特殊>值功能,用静态值替换公式。 为此,请执行以下步骤。
- 选择所有带有你的公式的单元格(任何含有RAND、RANDBETWEEN或RANDARRAY函数的公式),按Ctrl+C复制它们。
- 右键单击所选范围并单击 粘贴专用 > 价值观 或者,按Shift + F10,然后按V,这是上述功能的快捷键。
详细步骤请见《如何在Excel中把公式转换成数值》。
Excel随机选择:行、列或单元格
在Excel 365到Excel 2010的所有版本中工作。
如果你在Excel中安装了我们的Ultimate Suite,那么你可以用鼠标点击而不是用公式来做随机抽样。 下面是方法。
- 关于 Ablebits工具 标签,点击 随机化 > 随机选择 .
- 选择你想从中挑选样本的范围。
- 在该插件的窗格中,做以下工作。
- 选择你是否要选择随机的行、列或单元格。
- 定义样本量:可以是一个百分比或数字。
- 点击 选择 按钮。
就这样!如下图所示,在你的数据集中直接选择了一个随机样本。 如果你想把它复制到某个地方,只需按常规的复制快捷键(Ctrl + C)。
这就是如何在Excel中选择一个没有重复的随机样本。 感谢你的阅读,希望下周在我们的博客上见到你!
可用的下载
无重复的随机样本--公式示例(.xlsx文件)
终极套房14天全功能版(.exe文件)