Excel超20万行扁平文件多条件计数:求公式/宏实现指导
针对大行数Excel多条件计数的解决方案
嘿,我太懂你面对20万行数据手动筛选的崩溃了——尤其是DCodiServ要选一堆代码的时候,手动点完全是浪费生命。下面给你两种实用的解决办法,公式和宏都有,你可以根据自己的习惯选:
一、公式解法(适合不想碰代码的朋友)
如果你的Excel是365/2021及以后的版本(支持动态数组),用COUNTIFS结合XMATCH的组合效率很高,完全能hold住20万行:
=COUNTIFS(A:A,106,B:B,"EV MEDICAL SERVICES 2019",ISNUMBER(XMATCH(C:C,$E$2:$E$1000,0)),TRUE)
给你拆解下:
- A:A对应你的
CodiAdmi列,B:B是DesCont列,C:C是DCodiServ列,记得换成你实际的列标 $E$2:$E$1000是你存指定DCodiServ代码的列表区域,改成你自己的范围就行- XMATCH会挨个检查C列的值是否在代码列表里,ISNUMBER把匹配结果转成TRUE/FALSE,最后COUNTIFS统计同时满足三个条件的行数
要是你用的是旧版Excel(不支持动态数组),就用SUMPRODUCT,虽然速度稍慢,但20万行也能应付:
=SUMPRODUCT((A:A=106)*(B:B="EV MEDICAL SERVICES 2019")*(ISNUMBER(MATCH(C:C,$E$2:$E$1000,0))))
⚠️ 小提醒:尽量别用整列(比如A:A),改成实际的数据范围(比如A2:A200001),能大幅提升计算速度,减少卡顿。
二、VBA宏解法(适合经常重复统计的情况)
如果需要频繁做这类统计,写个宏会更省心,步骤超简单:
- 按
Alt+F11打开VBA编辑器 - 右键你的工作簿→插入→模块,新建一个空模块
- 把下面的代码粘贴进去:
Sub CountMultiConditions() Dim ws As Worksheet Dim lastRow As Long Dim criteriaRange As Range Dim countResult As Long Dim i As Long ' 修改成你实际的工作表名称 Set ws = ThisWorkbook.Worksheets("Sheet1") ' 自动获取数据的最后一行(不用手动数行数) lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' 修改成你存放指定DCodiServ代码的区域 Set criteriaRange = ws.Range("E2:E1000") countResult = 0 ' 从第二行开始遍历数据(假设第一行是表头) For i = 2 To lastRow ' 同时检查三个条件 If ws.Cells(i, "A").Value = 106 _ And ws.Cells(i, "B").Value = "EV MEDICAL SERVICES 2019" _ And Not IsError(Application.Match(ws.Cells(i, "C").Value, criteriaRange, 0)) Then countResult = countResult + 1 End If Next i ' 弹出统计结果,也可以改成写入单元格,比如 ws.Range("G1").Value = countResult MsgBox "符合条件的行数为:" & countResult, vbInformation, "统计完成" End Sub
宏的使用说明:
- 把代码里的
Sheet1改成你的工作表名称,E2:E1000改成代码列表的实际区域 - 运行宏:按
F5,或者回到Excel,点「开发工具」→「宏」→选择CountMultiConditions执行 - 要是不想弹窗显示结果,把
MsgBox那行换成ws.Range("G1").Value = countResult,结果就会写到G1单元格里
额外小贴士
- 20万行数据推荐用Excel 365的动态数组公式,计算速度比旧版公式快很多
- 运行宏前记得保存文件,避免意外丢失数据
- 可以把数据区域转成Excel表(按
Ctrl+T),这样后续数据更新时,公式和宏都能自动适配新的行数
内容的提问来源于stack exchange,提问作者Norcarde
相关产品推荐
相关产品推荐

