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

求Excel中更高效的重复值计算公式(优先nlogn复杂度)

高效计算Excel单列60万+行重复值总数的方法

针对你621224行单列数据的重复值总数计算需求,以下是几种远优于COUNTIF(O(n²)复杂度)的高效方案,均基于数据已排序的前提:

方案1:相邻单元格对比(O(n)复杂度,最快)

利用排序后相同值连续的特性,通过对比相邻单元格快速标记重复项:

  1. 假设数据从J1开始(无表头),在K1输入:
    =IF(J1=J2,1,0)
    
  2. 在K621224(最后一行)输入:
    =IF(J621224=J621223,1,0)
    
  3. 选中K2到K621223的区域,输入以下公式后按Ctrl+Enter批量填充:
    =IF(AND(J2<>J1,J2<>J3),0,1)
    
  4. 对K列求和,结果即为所有重复出现的单元格总数(出现次数≥2的单元格总个数)。

方案2:SUMPRODUCT+MATCH(O(nlogn)复杂度)

借助排序后MATCH的二分查找特性,避免全范围遍历:
直接在任意空白单元格输入以下公式(若有表头需调整范围为J2:J621224):

=SUMPRODUCT(--(MATCH(J:J,J:J,0)<ROW(J:J)))

原理:MATCH返回每个值首次出现的行号,若当前行号大于首次出现行号,说明是重复项,标记为1,求和后得到重复单元格总数。

方案3:Power Query(大数据最优解)

对于超大规模数据,Power Query的引擎级处理效率远高于工作表公式:

  1. 选中数据列,点击「数据」选项卡→「从表格/区域」(Excel 2016及以上版本支持)
  2. 在Power Query编辑器中,选中目标列,点击「转换」→「分组依据」:
    • 分组依据:选择目标列
    • 新列名:输入出现次数
    • 操作:选择「行计数」
  3. 添加自定义列,公式为:
    = if [出现次数] > 1 then [出现次数] else 0
    
  4. 选中自定义列,点击「转换」→「统计行」→「求和」
  5. 关闭并上载结果到Excel,即可得到重复值总数。

原方案低效原因

你使用的COUNTIF($J$1000:J14353,J5353)本质是逐行遍历指定范围,60万行数据会产生约3.8e10次运算,属于O(n²)时间复杂度,因此卡顿严重。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:30:49