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

Excel中如何统计A列或B列满足指定条件的行数(OR逻辑)

Excel多列OR条件计数方案

你要实现的「任意一列满足条件即计数、同一行多列满足也只算1次」的需求,可以用以下几种方案实现,按使用场景选择即可:

通用兼容公式(全Excel版本可用)

基于集合容斥原理计算,不需要高版本支持,也不需要启用宏:

=COUNTIF(A1:A100,"*shopping*")+COUNTIF(B1:B100,"*shopping*")-COUNTIFS(A1:A100,"*shopping*",B1:B100,"*shopping*")

逻辑说明:

  • 先分别统计A列匹配、B列匹配的行数总和
  • 减去两列同时匹配、被重复计数的行,最终结果就是OR逻辑下的准确行数
  • 支持通配符匹配,和原生COUNTIF的条件写法完全一致

高版本简洁公式(Excel 365/2021及以上版本)

支持LAMBDA函数的版本可以直接逐行判断,不需要手动计算容斥,扩展更多列的时候更方便:

=SUM(--BYROW(A1:B100,LAMBDA(r,OR(ISNUMBER(SEARCH("shopping",r))))))
  • 该写法默认不区分英文大小写,需要区分大小写时把SEARCH替换为FIND即可
  • 不需要写通配符,SEARCH会自动检测单元格内是否包含目标文本
  • 如果要扩展到更多列,只需要把A1:B100改成对应的数据范围即可

自定义COUNTIF_OR函数(完全匹配预期的调用方式)

如果需要频繁使用多区域OR逻辑计数,可以自定义通用函数,和你预期的调用逻辑完全一致:

  • 按Alt+F11打开VBA编辑器,右键点击当前工作簿名称,选择「插入-模块」
  • 在模块代码窗口粘贴以下代码:
Function COUNTIF_OR(ParamArray args() As Variant) As Variant
    Dim i As Long, rowCount As Long, j As Long
    Dim isMatch As Boolean
    ' 校验参数是否为「区域,条件」成对传入
    If (UBound(args) + 1) Mod 2 <> 0 Then
        COUNTIF_OR = CVErr(xlErrValue)
        Exit Function
    End If
    rowCount = args(0).Rows.Count
    ' 逐行判断是否有任意一组区域+条件匹配
    For i = 1 To rowCount
        isMatch = False
        For j = 0 To UBound(args) Step 2
            If args(j).Cells(i, 1).Text Like args(j + 1) Then
                isMatch = True
                Exit For
            End If
        Next j
        If isMatch Then COUNTIF_OR = COUNTIF_OR + 1
    Next i
End Function
  • 保存文件为启用宏的格式(.xlsm),之后就可以直接按需要的格式调用:
=COUNTIF_OR(A1:A100,"*shopping*",B1:B100,"*shopping*")

如果系统区域设置默认公式分隔符为分号,把公式里的逗号换成分号即可正常使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:36:26