Excel中存在相同故障数量时,如何正确提取每日Top3故障类型?
解决VLOOKUP提取前三故障类型时重复显示同类型的问题
我太懂这个坑了——当多个故障类型当日发生数一模一样时,VLOOKUP只会死死盯着第一个匹配项输出,完全不搭理其他同数值的类型,而且网上常见的COUNTIF固定值方法,确实没法适配每日故障数变动的场景。下面给你两个实战好用的动态解决方案:
方案1:适配所有Excel版本的INDEX+MATCH动态排名法
假设你的故障类型存放在A2:A10区域,当日故障数所在列是B2:B10(可以根据日期动态切换列,比如用OFFSET或者直接引用当日列标)。要提取排名前三的故障类型,在空白单元格(比如D2)输入以下公式:
=IFERROR(INDEX($A$2:$A$10, MATCH(LARGE($B$2:$B$10 + ROW($B$2:$B$10)/1000, ROW(A1)), $B$2:$B$10 + ROW($B$2:$B$10)/1000, 0)), "")
然后下拉公式到D4即可。
原理说明:
给每个故障数加上行号的千分之一(这个数值足够小,不会影响原故障数的大小排序),这样即使两个故障数完全相同,因为行号不同,最终的组合值会有微小差异。LARGE函数就能按这个组合值排序,MATCH就能精准定位到不同行的故障类型,不会重复抓取同一个。
方案2:Excel 365/2021专属的动态数组简化法
如果你的Excel版本支持动态数组(365或2021及以后),用FILTER+TAKE的组合会更简洁,而且不需要下拉公式,自动溢出结果。在D2输入:
=IFERROR(TAKE(FILTER($A$2:$A$10, $B$2:$B$10 >= LARGE($B$2:$B$10, MIN(3, COUNTA($B$2:$B$10)))), 3), "")
原理说明:
LARGE($B$2:$B$10, MIN(3, COUNTA($B$2:$B$10)))先算出当日排名第三的故障数(如果当日故障类型不足3个,就取最后一个的数值);FILTER筛选出所有故障数≥这个数值的类型;TAKE取前3个结果,自动适配同数值的多个类型。
额外提示
如果需要切换不同日期的列,只需要把公式里的$B$2:$B$10替换成当日对应的列区域即可,比如10月15日的列是F2:F10,就改一下引用,公式会自动重新计算。
内容的提问来源于stack exchange,提问作者André Silva
相关产品推荐
相关产品推荐

