谁不在,随机抽奖就永远不会抽中他,这 Excel 公式得有多难?
很多同学会觉得 Excel 单个案例讲解有些碎片化,初学者未必能完全理解和掌握。不少同学都希望有一套完整的图文教学,从最基础的概念开始,一步步由简入繁、从入门到精通,系统化地讲解 Excel 的各个知识点。
现在终于有了,以下专栏,从最基础的操作和概念讲起,用生动、有趣的案例带大家逐一掌握 Excel 的操作技巧、快捷键大全、函数公式、数据透视表、图表、打印技巧等……学完全本,你也能成为 Excel 高手。
今天这个需求乍一听很难的,但如果巧花心思,用了变通的方法,就能四两拨千斤。
从一列数据随机抽取单元格,但是要剔除掉某个单元格,不让它出现,而其余单元格的随机出现概率依然相等。
案例:
从下图 1 的姓名中随机抽奖,由于当天宋大莲请假,所以抽奖结果不要包含她,其他人的抽奖机会均等。
效果如下图 2、3 所示。
解决方案:
我先把公式一步步拆解给大家看,这样可以让大家更容易理解。
1. 在 C2 单元格中输入以下公式 --> 回车:
=RANDBETWEEN(1,12)
公式的作用是生成 1 至 12 的随机整数。因为 A 列中共有 12 个姓名,所以需要生成 12 个随机数。
按 F9,随机数就会自动随机刷新。
2. 在 D2 单元格中输入以下公式:
=INDEX(A2:A13,C2)
公式释义:
- 在 A2:A13 中提取出排列位置为 C2 单元格的值的姓名。
这是按 F9 的效果。
接下来设置一个公式,将“宋大莲”强制显示为“詹姆斯下士”。
3. 在 E2 单元格内输入以下公式:
=--TEXT(C2,"[=10]1;0")
公式释义:
- [=10]1:当 C2 单元格的值为 10 时,强制显示为 1;
- 0:这里的 0 是个通配符,代表所有数值;意思是如果 C2 单元格不为 10 时,就显示数值本身;
- --:text 函数的结果是文本值,-- 能把文本转换成数值
当 C2 的值为 10 时,E2 的值变成了 1。
4. 最后再根据 E2 的值设置 index 查找公式就可以了:
=INDEX(A2:A13,E2)
到了这里,不知道大家发没发现一个问题?
虽然我们已经成功让“宋大莲”不参与抽奖,但是由于“詹姆斯下士”自己和“宋大莲”都会显示成“詹姆斯下士”,这无疑就增加了“詹姆斯下士”的中奖机会,使得结果不公平了。
如何解决这个问题?很简单,让“詹姆斯下士”自己不参与抽奖就可以了。
5. 将 C2 单元格的值修改为:
=RANDBETWEEN(2,12)
公式释义:
- 将随机数改为从 2 开始,这样在匹配的时候就不会匹配出排在第一的“詹姆斯下士”了,从而大家的抽奖机都一致,公平合理。
最后,我们只需将分解的公式合并成一个。
6. 在 C2 单元格中输入以下公式 --> 删除其他所有辅助列:
=INDEX(A2:A13,--TEXT(RANDBETWEEN(2,12),"[=10]1;0"))
下面就是随机抽奖效果。