Excel技术求助:按匹配条件提取AY列重复次数TOP10值及计数
我来帮你搞定这个Excel公式难题——你的核心需求是:基于M1单元格的匹配值,筛选Report工作表中BE列与之相等的行,然后从这些行的AY列里,提取重复次数最多的前10个非空值,放到M24到M34区域。下面分两种Excel版本给出精准解决方案:
方案1:Excel 365/2021(支持动态数组)
这个版本用动态数组公式一步到位,不用下拉,输入后自动填充到M24-M34:
在M24单元格输入以下公式:
=LET( 筛选数据集, FILTER(Report!AY:AY, (Report!BE:BE=M1)*(Report!AY:AY<>""), ""), 唯一值列表, UNIQUE(筛选数据集), 频次统计, COUNTIF(筛选数据集, 唯一值列表), 排序结果, SORT(HSTACK(唯一值列表, 频次统计), 2, -1), TOP10高频值, TAKE(排序结果, 10, 1), IFERROR(TOP10高频值, "") )
公式拆解:
LET:给中间变量命名,让公式逻辑更清晰,避免重复计算FILTER:先筛选出BE列等于M1且AY列非空的所有值,排除无效数据UNIQUE:从筛选后的数据集里提取不重复的值COUNTIF:统计每个唯一值在筛选数据集中的出现次数HSTACK + SORT:把唯一值和对应频次合并成两列,再按频次降序排序TAKE:取排序结果的前10行、第一列(也就是高频值)IFERROR:如果符合条件的高频值不足10个,剩余单元格显示空
方案2:旧版Excel(无动态数组支持)
如果你的Excel版本不支持动态数组(比如2019及更早),需要用数组公式,输入后按Ctrl+Shift+Enter确认,再下拉到M34:
在M24单元格输入:
=IFERROR(INDEX(Report!AY:AY, MATCH(1, (Report!BE:BE=$M$1)*(Report!AY:AY<>"")*(COUNTIF($M$23:M23, Report!AY:AY)=0)*(COUNTIFS(Report!BE:BE, $M$1, Report!AY:AY, Report!AY:AY)=LARGE(IF((Report!BE:BE=$M$1)*(Report!AY:AY<>""), COUNTIFS(Report!BE:BE, $M$1, Report!AY:AY, Report!AY:AY)), ROW(A1))), 0)), "")
公式核心逻辑:
COUNTIFS:精准统计BE列等于M1时,每个AY值的重复次数LARGE(..., ROW(A1)):下拉时自动取第1、2...10大的频次值MATCH:找到满足「匹配条件+非空+未在上方单元格出现过+对应频次为第N大」的第一个AY值INDEX:返回该值,IFERROR处理无结果的情况
注意事项
- 尽量避免整列引用(比如
Report!AY:AY),如果你的数据有明确的行范围(比如到第1000行),改成Report!AY2:AY1000,能大幅提升公式计算速度 - 旧版数组公式必须按
Ctrl+Shift+Enter确认,否则只会返回单个值 - 如果多个值的重复次数相同,公式会按它们在Report表中出现的先后顺序返回
内容的提问来源于stack exchange,提问作者cannon




