You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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列等于M1AY列非空的所有值,排除无效数据
  • 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

火山引擎 最新活动