原文标题:《哪位 Excel 高人琢磨出的这个随机抽奖技巧,太绝了!》
年前我们发布过一篇文章《我用 Excel 做了一个年会抽奖器,然后老板点了一下……》,这其中的核心是获取不重复随机整数。
获取不重复随机整数的方法有很多,迭代计算太过鸡肋,VBA 编程未免牛刀杀鸡。
今天,小花就跟大家分享几个实用的函数公式,超赞的那种哦!
1、辅助排名法
RAND 函数的作用是生成 0-1 之间的随机数,于是我们只需通过 RAND 函数生成一组随机数,再将它们进行排名,就有极大概率可以得到一组不重复随机整数。
C 列 —— 辅助列公式:
=RAND
B2—— 不重复随机整数公式:
=RANK
公式说明:
RAND 函数可以返回 0-1 之间的随机数;
RANK 函数则是返回某个数在一列数字中相对于其他数值的大小排名。
所以,先生成随机数值,再计算每个数的排名值,即可得到一组随机整数。
PS : 公式按键会重新计算,重新计算即可刷新排名组,获得新的不重复随机整数。本文其他案例同理。
这两个函数是我们取不重复随机数中最常见的一种方法。
它比较简单,容易学会。
不过这个公式有个致命 Bug 是,每一个 RAND 函数生成的随机数都是独立的,也就是说,这些随机数还是有极小的概率彼此相等,进而出现重复的排名值。如下图:
RAND 函数辅助法并不严谨,且需要辅助列,因此只能算是不重复随机整数的入门级解法。
接下来,小花来介绍两种比较严谨的方法,可能比较难 ,大家重在理解解决的思路,干货满满,一定要坚持看下去哦!
2、逐次消除法
获取不重复随机整数的核心问题是:如何让已经出现的数字不再出现?
解决思路:把出现的数字从抽取数字池中消除掉,然后再从剩余数字中随机取数,这样就能够生成一组不重复随机整数。
下面这个公式就是按照这个思路设置的。
B3—— 逐次消除法公式:
=SMALL),"",ROW($1:$10)),RANDBETWEEN(1,12-ROW()))
PS:该公式内含数组运算,输入公式后需按函数才能正确运算。
公式比较复杂,大家跟着我的思路,进一步理解公式的原理。
B3 单元格公式说明:
① COUNTIF)
这一步的主要目的是:通过 Countif 函数进行数值计数,进而判断当前单元格的上一单元格数值是否有在 1 到 10 中出现过 。
当前单元格是 B3 ,$B$1:B2 是它前面的单元格。$B$1:B2 仅锁定起始单元格,表示从首个单元格 B1 到当前单元格的上一单元格,这就涵盖了全部已抽取的整数。
ROW 返回 1 到 10 的有序数组 1;2;3;4;5;6;7;8;9;10,COUNTIF 函数统计这组数是否在全部已抽取的整数中出现,如出现返回 1,否则返回 0。
由于仅有数字 7 出现在 $B$1:B2 中,B2 单元格目前是 7 , 所以 COUNTIF 数组运算后返回数组:
1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 ; 10
0 ; 0 ; 0 ; 0 ; 0 ; 0 ; 1 ; 0 ; 0 ; 0
② IF)
如下图,将①中结果数组 0;0;0;0;0;0;1;0;0;0 作为逻辑判断值,1 等价于 TRUE,0 等价于 FALSE。
IF 函数根据逻辑判断值,TRUE 返回空 "",FALSE 返回对应的数字。
于是整个公式片段②就完成了将有序数组 1;2;3;4;5;6;7;8;9;10 中在 $B$1:B2 已出现的数字替换为空,实现逐次消除。
将 B2 单元格中的 7 替换为空 "",这样后续随机取数不会抽到前面所出现的数值。
1 ; 2 ; 3 ; 4 ; 5 ; 6 ; "" ; 8 ; 9 ; 10
③ SMALL))
这一步的目的主要是随机取数。
SMALL 函数主要用来提取数组中第 k 个最小值的数值,忽略空值。
RANDBETWEEN 则负责在指定范围内,随机抽取一个值作为 k。
为确保每个数被抽取的概率一致且不出错,k 的最小值必须等于 1,最大值(即 TOP)必须始终与②结果数组中的数字个数一致。
公式中,用 12-ROW 作为 TOP 的值。ROW 用于返回当前单元格的行数,在 B2 时,12-ROW 为 10,逐行递减 1,B3 为 9,刚好始终与② 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; "" ; 8 ; 9 ; 10 中剩余可抽取的数字个数一致。
RANDBETWEEN 函数在 1 和剩余个数 9 之间随机取数 k,再使用 SMALL 函数来取对应第 k 小的数字 m,最终再获得一个不重复随机数,以此类推,即可得到一组不重复随机整数。
掌握了随机不重复整数公式后,只需稍加变形,我们就可以借助 INDEX 函数实现随机抽奖等高端操作。下图就是利用逐次消除法随机抽取 5 名获奖人员的案例。
D3—— 随机抽奖公式:
=INDEX,"",ROW($1:$10)),RANDBETWEEN(1,12-ROW())))
3、乱序取余法
如果能够将指定范围内的数字随机打乱,那么只需按打乱后的顺序依次抽取数字就能够得到一组不重复随机数。
下面这个公式就是将有序数组加上 10 的任意倍数来打乱数字的大小次序,再使用 LARGE 或 SMALL 函数来依次取值,取余,即最终生成随机不重复整数。
B2:B11 数组公式 —— 乱序取余法:
=MOD^0,10)*100+ROW(1:10),ROW(1:10)),100)
PS:该公式为数组公式,其输出结果为一组数,需占用 B2:B11 单元格才能正确显示。
因此,需先选择 B2:B11 单元格,输入公式后,再按。不能像逐次消除法公式那样在单个单元格里按执行数组运算后再拖动填充,切记!
下面进行简单的公式解释。
公式说明:
ROW ^0 将 1 到 10 的有序数组 A 1;2;3;4;5;6;7;8;9;10 取其 0 次幂,得到 10 个 1 组成的常数数组 B 1;1;1;1;1;1;1;1;1;1。
PS : 在数学中,任何非 0 的 0 次幂,结果都为 1 。
RANDBETWEEN^0,10)
使用 RANDBETWEEN 函数来生成 10 个彼此独立的从 1 到 10 的随机整数,得到随机数组 C 10;6;3;8;4;2;8;5;4;7。
数组 C*100+ROW 将数组 C 扩大 100 倍再加上有序数组 A,得到 (不重复) 数组 D 1001;602;303;804;405;206;807;508;409;710。
数组 D 的特点是其尾数依次是有序数组 A 1;2;3;4;5;6;7;8;9;10,但其大小却由位于百位的随机数组随机数组 C 10;6;3;8;4;2;8;5;4;7 决定,这就实现了将有序数组 A 随机打乱。
=MOD^0,10)*100+ROW(1:10),ROW(1:10)),100)
通过 LARGE 函数依次取最大的第 1 到第 10 的数字,再取 100 的余数,就可以将数组 A 1;2;3;4;5;6;7;8;9;10 中的每个数字重新剥离出来,
但此时他们的次序已经按随机数组 C 的大小进行了重排,得到公式计算结果数组 E 1;7;4;10;2;8;9;5;3;6,数组运算将结果数组依次填列在 B2:B11 单元格中。
运用乱序取余法公式,可以轻松解决随机分组问题。
我们来简单看看一个基础案例。
如下图,将一组姓名随机分为 2 组。
B2:B11 数组公式 —— 乱序取余法:
=MOD^0,10)*100+ROW(1:10),ROW(1:10)),100),2)+1amp;"组"
学会这三种方法,不重复随机取值的做法就难不倒大家啦~
4、最后的话
本文小花分享的获取随机不重复整数的三个函数公式,包括:
? 辅助排名法:
通过 RAND 构建辅助列,再使用 RANK 进行排名;
? 逐次消除法:
使用 IF+COUNTIF 消除已出现值,在用 SMALL 随机取值;
? 乱序取余法:
构建随机数组 * 100 + 有序数组,用 LARGE 进行排序后再由 MOD 取余数;
大家学会了吗?这下平时的抽奖和团建随机组队不用愁了吧!
声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多企业信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。投资有风险,需谨慎。
环旭电子毛利率创上市十年新低,股价跌跌不休,连续回购有
图片来源:图虫3月28日,环旭电子(601231.SH)披露2021年年度报告称,该公司去...
两个20CM涨停,津荣天宇拟10转8派3,上市没满周年
图片来源:图虫创意3月29日,津荣天宇(300988.SZ)再次“20CM涨停”,收于44...
在管面积翻倍,碧桂园服务称大规模收并购已过去
图片来源:碧桂园服务结束过去一年来的大举收并购后,在3月29日召开的2021年度业绩发布会...
首套房利率降至5.2%,武汉楼市政策也放松了
去年被投资客们看好的武汉楼市,近期也继续出台了楼市刺激政策。界面新闻获悉,武汉房贷利率出现...
英国通胀创30年来最快增速,政府宣布立即降调燃油税
2022年3月9日,英国丹伯里,埃克森美孚公司运营的埃索加油站。图片来源:视觉中国英国政府...
让孩子自信互动才是幼儿园质量“金标准”
让孩子自信互动才是幼儿园质量“金标准” “入园难、入园贵”的问题终于不那么令人焦灼了。近年...
佳通轮胎获行业“十大轮胎品牌”等奖项
近日,由中国轮胎商务网发起主办、善养汽车联合主办的ApexTire2021中国轮胎年度大选...
快手2021年营收811亿元,调整后净亏损188.5亿
,快手今日公布了2021年第四季度及全年财报。财报显示,该公司第四季度营收244亿元,同比...
奇安信2022年新增订单超9亿元同比增长超65%
3月29日,奇安信发布关于近期经营情况的公告。公告显示,目前公司在手订单超23亿元,202...
大摩:苹果、谷歌等大型科技企业股票反弹,亚马逊、英伟达
北京时间3月29日早间消息,据报道,摩根士丹利财富管理公司表示,美国主要的科技和互联网股票...
万科蝉联第一2022房企综合实力TOP500测评成果出
3月29日,2022房地产开发企业综合实力测评成果正式发布,“房地产开发企业综合实力TOP...
华为加码芯片研发:海思升格为一级部门
华为本周发布2021年年度报告,从华为2021年的最新业务架构来看,海思已经从2012实验...
LGDisplay加码抢占中国透明显示市场
LGDisplay于3月29日至31日在北京东外56号文创园,以“YourLifewith...
一汽-大众奥迪赛车队加冕中国超级跑车锦标赛2021赛季
2022年3月24日,代表一汽-大众奥迪赛车队出征中国超级跑车锦标赛(ChinaGT)20...
StrategyAnalytics:
根据StrategyAnalytic...
增程技术成2022百人会热门增程式S
3月27日,中国电动汽车百人会论坛(...
工信部:1-2月份我国软件业务收入1
近日,工信部发布《2022年1-2月...
元宇宙进行时,高通在行动
近期,高通宣布设立总金额达1亿美元的...
Ultrasuede®携手智己L7打
环保可持续发展的理念不断融于各行各业...