【动态数组】行业案例:抽奖程序三种

清华学弟任泽岩
清华学弟任泽岩

创作者俱乐部成员

困难如山,我有金山。

欢迎收看本期【动态数组】专题,我是学弟。

【动态数组】专题均使用动态数组的相关函数,进行一定范围内行业应用。

本期学弟带大家进行抽奖程序的模拟制作。

【作者简介】
社区ID:清华学弟任泽岩
WPS办公软件商业讲师
- 金山办公最有价值专家(KVP)、金山办公认证讲师(KCT)、金山WPS社区优秀创作者、金山文档行业金鹰社社员、表格菁培班毕业生;
- 微博认证职场博主、微信视频号年度潜力主播、百度百科【任泽岩】词条收录;
- 中国南方航空公司十佳教员、金牌微课制作师,全国培联/培协推优大赛金奖获得者,《培训》杂志“师道匠心”全国金牌内训师称号获得者,两度获得Toastmasters国际演讲会International Speech Contest赛事冠军;
- 中国管理科学学会高级企业培训师,入选全国优秀技能型人才库。

抽奖,大家都非常熟悉,在本案例中,我们假定:

  1. 一共有20位员工:赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许

  1. 要抽出三等奖3名、二等奖2名、一等奖1名

  1. 每个人最多只能中一种奖项

👋

抽奖的方式一般有三种:

  1. 找一位嘉宾,一股脑摇出6位中奖人员,1、2、3位对应三等奖,4、5位对应二等奖,6位对应一等奖;这种抽取方法在WPS表格中最为简单,但在实际情况下应用较少;

  1. 找三位嘉宾,一位小领导抽3位三等奖、颁奖,然后插入一些节目表演,一位中领导抽2位二等奖、颁奖,再插入一些节目表演,一位大领导抽1位一等奖、颁奖;这种抽取方法最为常见,在WPS表格中实现也难度适中;

  1. 找六位嘉宾,一个一个抽取,这种抽取方法在实际情况中也很常见,适用于比较长的晚会、或者使用抽奖箱一个一个往出掏奖券,WPS表格的函数难度最大。

即:

  1. 一次把6个获奖者全抽出来;

  1. 分三次,每个奖级的获奖者一次性抽出来;

  1. 分六次,每个获奖者抽一次。


从WPS表格的角度来讲,这三种方法的抽奖原理很相似,都是给所有人赋予一个唯一的随机值,然后取最大(或最小)的前N个值,作为得奖的随机数,再进行反查,得到获奖者的工号和姓名;三种抽奖方法的工作量有所不同。

接下来学弟由浅入深,分别进行抽奖模拟:

【一次抽6个】

使用RAND()函数赋予一个随机数,这个随机数有9位小数,这样在进行排序的时候很难很难很难遇到完全相同的数字啦。(学弟这里用了RAND()*RAND()双保险,真的只有几亿分之一的概率才能完全相同了。)

使用=XLOOKUP(LARGE(D2:D21,ROW(A1:A6)),D2:D21,B2:B21,,0)

对找到前六大的随机值,通过XLOOKUP反查他们的工号,再通过

=VLOOKUP(G2#,B2:C21,2,0)

找到工号对应的姓名(此举能够避免重名的情况,工号在任何组织里都是每个人唯一的)

按F9刷新,就可以一次性摇出6位获奖者啦!


【一个奖级抽一次】

这种抽法比前一种的难点在于,抽完3个三等奖以后,就要把他们从大数据库里删除,不让他们参加二等奖的抽取,因此:

设置3列随机数,只要三等奖随机数对应的工号与前面源数据表的工号相同,则用0代替。由于FIND不能直接在数组中查找,因此使用TEXTJOIN函数将几个中奖结果用","连起来,然后在里面找工号,比如:

,2,9,5,

中查找

,2,

,9,

,5,

这样就能避免"12"中能找到"1"、也能找到"2"的错误情况。

=IFERROR(IF(FIND(","&B2&",",","&TEXTJOIN(",",,$K$2:$K$4)&","),0),RAND()*RAND())

真值强制赋予0,假值继续赋予随机数。由于RAND()函数生成的是0-1之间的随机数,只要被赋予0,那么在二等奖的抽取中,就永远不可能在LARGE前几名,绝对抽不到了。

抽取一等奖也是一样,要把三等、二等奖的工号全连起来,一起赋值查找,因此强制赋予的0是越来越多的,而且会“一0到底”:

这里还有一个需要注意的事情,由于三等奖在抽取过程中本身就是随机数,会一直在动,因此抽完的3位三等奖,需要有一个手工复制-选择性粘贴-值 的过程,进行记录:


【6个人抽6次】

理解了这一点,6个人抽6次就很好理解了,它就是需要做6组随机数:

注意的是每次都要:

  1. 进行一次选择性粘贴值,记录中奖人员;

  1. 写随机数的公式时,注意每多一个中奖工号,就要多带一个单元格进行查找;

  1. 写抽奖的公式时,注意LARGE中的列是要对应不同的列,依次向右。


软件分享链接:

【金山文档】 抽奖程序三种

https://kdocs.cn/l/cd1YtY7RF9Oo

此外,在学弟本文起草过程中,得到WPS社区@懒得批爆 老师的大力帮助,在此深表感谢!

祝大家学习愉快!


如果你觉得今天的教程对你有帮助,欢迎在下方为我点一颗小红心💖💖💖哦!

>>> 欢迎收看清华学弟任泽岩WPS社区【个人帖子合集】 <<<

辽宁省
浏览 1388
收藏
19
分享
19 +1
12
+1
全部评论 12
 
方盛
方盛

创作者俱乐部成员

助你一臂之力
· 湖北省
回复
 
xxp
\(`Δ’)/
· 中国
1
回复
 
辽师大~徐一鑫
学到啦!👍
· 辽宁省
回复
清华学弟任泽岩
清华学弟任泽岩

创作者俱乐部成员

徐教授好
· 中国
回复
 
笑着流汨
打卡
· 四川省
回复
 
wps新路
wps新路

WPS函数专家

学习了
· 重庆
回复
 
HC.旋
学习了
· 江苏省
回复
 
亂雲飛渡
学习
· 广东省
回复
 
懒得批爆
懒得批爆

创作者俱乐部成员

共同努力
· 四川省
1
回复
 
清华学弟任泽岩
清华学弟任泽岩

创作者俱乐部成员

这个程序目前属于毛坯房,实际上线的话后面还需要进行一定的美化设计、功能封装
· 辽宁省
2
回复
 
王俊博
王俊博

创作者俱乐部成员

学会了!
· 河北省
回复
 
志尧ZhiYao
志尧ZhiYao

创作者俱乐部成员

经常使用哦👏🏻👏🏻👏🏻
· 江西省
回复