如何在Excel抽奖中排除已选中名单?仅用基础函数实现
问题说明
有24人名单存于C3:C26区域,每周需随机选出1人,按F9键刷新单元格生成随机名字,手动将选中名字录入M3:M26区域追踪。但当前公式无法排除已选中的名字,且抽奖时会出现空白单元格,要求仅用Excel基础函数实现,不能使用VBA。
现有公式情况
- 主随机公式:
=INDEX(D3:D26;RANDBETWEEN(1;COUNTA(D3:D26))) - D列辅助公式:
=IF(P3=FALSE;C3;""),其中P列公式为=COUNTIF($M$3:$M$26;$C$3:$C$26)=1,用于标记已录入M列的名字,标记后D列对应单元格变为空值。
解决方案
步骤1:确认已选标记列(P列)
在P3单元格输入以下公式,下拉至P26:=COUNTIF($M$3:$M$26,C3)=1
该公式会自动判断C列名字是否已出现在M列,已选则返回TRUE,未选返回FALSE。
步骤2:设置抽奖公式
分两种Excel版本处理:
适用于所有Excel版本(含旧版)
添加E列作为未选名单辅助列:在E3单元格输入数组公式(输入后按「Ctrl+Shift+Enter」确认),下拉至E26:
=IFERROR(INDEX($C$3:$C$26,SMALL(IF($P$3:$P$26=FALSE,ROW($C$3:$C$26)-ROW($C$3)+1),ROW(A1))),"")
E列会自动列出所有未被选中的名字,无空白占位。主抽奖单元格输入公式:
=INDEX($E$3:$E$26,RANDBETWEEN(1,COUNTA($E$3:$E$26)))
适用于Excel 365/2021(动态数组版本)
无需辅助列,直接在抽奖单元格输入公式:=INDEX(FILTER(C3:C26,P3:P26=FALSE),RANDBETWEEN(1,ROWS(FILTER(C3:C26,P3:P26=FALSE))))
该公式直接过滤出未选名字,再从中随机抽取1个。
使用说明
每次选中名字后,手动录入M列对应的单元格,P列会自动标记该名字为已选,抽奖公式会自动排除已选名字,按F9刷新只会从剩余未选名单中随机生成结果,不会出现空白。
内容的提问来源于stack exchange,提问作者Bora Gultek

