You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Sheets单公式实现非唯一姓名按计数降序展示

高效实现11k姓名数据的重复项计数、过滤与排序

问题说明

现有含11k条数据的Names工作表(数据范围C3:C12000),需在另一工作表中展示出现次数≥2的姓名及其计数,并按计数降序排列。当前使用的两个公式存在以下问题:

  • 第一个公式会显示仅出现一次的姓名
  • 第二个公式需要手动下拉复制,操作繁琐
  • 整体计算卡顿甚至导致表格崩溃

解决方案

根据你使用的表格工具(Google Sheets/Excel 365),以下是单个高效公式实现方案:

方案1:Google Sheets 专用(性能最优)

使用QUERY函数嵌套,先分组计数再过滤排序:

=QUERY(QUERY(Names!C3:C12000, "SELECT Col1, COUNT(Col1) WHERE Col1 IS NOT NULL GROUP BY Col1", 0), "SELECT * WHERE Col2 >= 2 ORDER BY Col2 DESC", 1)

或者用更简洁的GROUPBY函数(需Google Sheets支持该函数):

=SORT(FILTER(GROUPBY(Names!C3:C12000, Names!C3:C12000, COUNT, 0), INDEX(GROUPBY(Names!C3:C12000, Names!C3:C12000, COUNT, 0),,2)>=2), 2, FALSE)

方案2:Excel 365/2021 专用(动态数组)

用LET函数封装计算逻辑,减少重复计算:

=LET(
    姓名列, Names!C3:C12000,
    非空姓名, FILTER(姓名列, 姓名列<>""),
    唯一姓名, UNIQUE(非空姓名),
    计数, COUNTIF(非空姓名, 唯一姓名),
    过滤后数据, FILTER(HSTACK(唯一姓名, 计数), 计数>=2),
    SORT(过滤后数据, 2, -1)
)

为什么这些公式更高效?

  • 减少重复计算:原公式中COUNTIF会被多次调用,新方案仅执行一次分组/计数操作
  • 提前过滤无效数据:先排除空值,缩小计算范围
  • 一次性输出结果:无需下拉公式,动态数组/QUERY自动填充所有符合条件的行
  • 精准过滤:直接筛选出计数≥2的项,避免显示单次出现的姓名

原公式问题分析

  • 第一个公式未添加计数≥2的过滤条件,导致单次出现的姓名被保留
  • 第二个公式每个单元格单独执行COUNTIF,对11k数据重复计算,极大消耗资源
  • 未处理空值,增加了不必要的计算量

内容的提问来源于stack exchange,提问作者kumoyadori

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 20:01:14