使用Excel进行随机抽奖?其实很简单 | 您所在的位置:网站首页 › 如何用excel随机抽取数据 › 使用Excel进行随机抽奖?其实很简单 |
在日常工作或者生活中我们会经常面对抽奖的问题,比如从100个人里随机抽4个不同的人儿送3万块津巴布韦币。这事有个专业的名词叫不重复随机抽样,意思是样本中的单位只能抽中一次,抽中的单位不再放回整体。 举个例子还是。 如下图所示,A列是人名,现在需要从中动态抽取4个不重复的人,模拟结果见C列。 这样的问题,Excel解法有很多…很多……。打个响指,分享一下函数、Power Query、VBA、SQL等常用解法。 1 函数解 解法1:辅助列 对于大部分朋友而言,最简单的解法是使用辅助列。 B2单元格输入以下公式,向下复制填充,得到一列随机值。 C2单元格输入以下公式,复制填充到C2:C5区域。 公式依次从B列获取第1、2、3、4个最大值的索引号,以此从A列获取人名,返回结果模拟如下▼ 解法2:数组公式 以下数组公式中使用COUNTIF函数判断A里人名是否存在结果区域中,如果不存在,则返回对应行号,使用SMALL函数从中随机取一个值,再使用INDEX函数返回对应结果。 By:Lf 公式写在C2单元格,蓝色部分是思路核心▼ =INDEX(A:A,SMALL(IF(COUNTIF(C$1:C1,A$2:A$28)=0,ROW(A$2:A$28)),RANDBETWEEN(1,27-ROW(A1))) 解法3:区域数组公式 使用RANDBETWEEN函数从2到999之间获取27个随机值,加权百倍后加上行号,再使用SMALL函数依次取最小值,使用RIGHT函数取出行号,最后使用INDEX函数根据行号获取结果。 需要说明的是这是一条区域数组公式,应先选中C2:C5区域后,在编辑栏输入公示后,同时按三键结束公式输入。 蓝色部分是思路核心▼ =INDEX(A:A,RIGHT(SMALL(RANDBETWEEN(1^ROW(2:28),999)/1%+ROW(2:28),ROW(1:4)),2)) 解法4:动态数组公式 365版本才可用▼ =INDEX(SORTBY(A2:A28,RANDARRAY(27)),SEQUENCE(4)) RANDARRAY(13)生成13个随机值,SORTBY据此将A2:A14区域的数据排序,最后再使用INDEX函数取前4个即为结果——思路其实等同于辅助列。 2 Power Query解 生成一列随机值,排序后取前四即可。 3 VBA解 使用了洗牌法,参考代码如下: 代码解析见注释 4 SQL解 私信我关键字SQL,可以获取相关实战教程: …… 木了,今天和大家分享的内容就这些。 需要系统学习Excel,却找不到优质教程?学习Excel的过程中遇到疑难问题,却找不到人及时作出解答?私信我获取案例文件,我们一起来做不加班的职场人!! 作者:EH看见星光 |
CopyRight 2018-2019 实验室设备网 版权所有 |