Excel中使用INDEX函数实现平局随机打破(羞耻计数器场景)
解决Excel中平局时随机选取最大值对应人员的问题
嘿,这个羞耻计数器的玩法挺有意思!原来的规则是平局选最上方的人,现在要改成随机选,用INDEX函数完全可以实现,我给你两种方案,适配不同版本的Excel:
方案1:适配所有Excel版本(含旧版)
假设你的员工名字在A列(比如A2:A10),羞耻值在B列(B2:B10),可以用这个数组公式:
=INDEX(A:A,SMALL(IF(B2:B10=MAX(B2:B10),ROW(B2:B10)),RANDBETWEEN(1,COUNTIF(B2:B10,MAX(B2:B10)))))
注意:旧版Excel(2019及以前)输入完公式后需要按
Ctrl+Shift+Enter确认,新版Excel(365/2021)直接回车就行。
公式拆解:
MAX(B2:B10):先拿到当前周的最高羞耻值IF(B2:B10=MAX(B2:B10),ROW(B2:B10)):生成一个数组,只保留羞耻值等于最大值的员工行号,其他为错误值COUNTIF(B2:B10,MAX(B2:B10)):统计有多少个员工拿到了最高羞耻值RANDBETWEEN(1,COUNTIF(...)):随机生成1到最大值人数之间的整数,用来选第几个符合条件的员工SMALL(...,RANDBETWEEN(...)):从符合条件的行号里取出第N个行号INDEX(A:A,...):根据行号取出对应的员工名字
方案2:新版Excel简化版(365/2021)
如果用的是支持动态数组的Excel,用FILTER函数会更直观:
=INDEX(FILTER(A2:A10,B2:B10=MAX(B2:B10)),RANDBETWEEN(1,ROWS(FILTER(A2:A10,B2:B10=MAX(B2:B10)))))
逻辑更简单:
FILTER(A2:A10,B2:B10=MAX(B2:B10)):直接筛选出所有拿到最高羞耻值的员工名字ROWS(FILTER(...)):统计筛选结果的行数(也就是最大值人数)RANDBETWEEN(1,ROWS(...)):随机选一个位置INDEX(...):从筛选结果里取出随机选中的名字
这样就能完美实现你要的「平局时随机判定」的需求啦,每次刷新表格(或者按F9)都会重新随机一次哦。
内容的提问来源于stack exchange,提问作者Jalder
相关产品推荐
相关产品推荐

