公众号平台最新的推送规则对技术类文章不太友善,如果不想错过干货,请务必“设为星标”哦!!!
点击任意文章上方的“☆星标”即可。
今天这个需求乍一听很难的,但如果巧花心思,用了变通的方法,就能四两拨千斤。
从一列数据随机抽取单元格,但是要剔除掉某个单元格,不让它出现,而其余单元格的随机出现概率依然相等。
从下图 1 的姓名中随机抽奖,由于当天宋大莲请假,所以抽奖结果不要包含她,其他人的抽奖机会均等。
效果如下图 2、3 所示。
我先把公式一步步拆解给大家看,这样可以让大家更容易理解。
1. 在 C2 单元格中输入以下公式 --> 回车:
=RANDBETWEEN(1,12)
公式的作用是生成 1 至 12 的随机整数。因为 A 列中共有 12 个姓名,所以需要生成 12 个随机数。
2. 在 D2 单元格中输入以下公式:
=INDEX(A2:A13,C2)
公式释义:
接下来设置一个公式,将“宋大莲”强制显示为“詹姆斯下士”。
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)
公式释义:
最后,我们只需将分解的公式合并成一个。
6. 在 C2 单元格中输入以下公式 --> 删除其他所有辅助列:
=INDEX(A2:A13,--TEXT(RANDBETWEEN(2,12),"[=10]1;0"))