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

调用WorksheetFunction.Countifs传入字符串条件触发运行时错误1004

VBA调用WorksheetFunction.CountIfs报错1004的解决方案

报错核心原因

  • 所有条件区域的行列数不匹配:CountIfs要求所有传入的条件区域大小、形状完全一致,原代码中Da(A列数据区域)和Cat(C列数据区域)分别统计最后行,若两列数据行数不一致会直接触发1004报错
  • 日期条件拼接字符串导致格式不匹配:VBA拼接日期时会自动转为系统本地格式的字符串,和工作表中存储的日期序列号匹配失败
  • 无匹配结果时触发运行时错误:WorksheetFunction.CountIfs在无匹配结果时,部分Excel版本会直接抛出运行时错误,而非返回0值
  • 分类条件存在异常值:如果Category(i)为空、包含未转义的双引号等特殊字符,也会触发条件判断异常

修复后代码

Sub test()
    Dim i As Integer ' 补充缺失的循环变量声明
    Dim Category(7 To 10) As Variant
    Dim Ar As Double ' 改为Double类型存储日期序列号
    Dim Da As Range
    Dim Cat As Range
    Dim Br As Double ' 改为Double类型存储日期序列号
    Dim lastRow As Long ' 统一存储数据最后行
    Dim countResult As Variant
    
    ' 统一计算最后行,保证两个条件区域行数完全一致
    lastRow = Cells(Rows.Count, "A").End(xlUp).Row
    Set Da = Range("A3:A" & lastRow)
    Set Cat = Range("C3:C" & lastRow)
    
    ' 日期转为数值存储,避免格式匹配问题
    Ar = CDbl(Range("F2").Value2)
    Br = CDbl(Application.WorksheetFunction.EoMonth(Range("F2"), 0))
    
    For i = 7 To 10
        Category(i) = Worksheets("Log").Cells(1, i).Value
        ' 跳过空的分类条件,避免空值触发异常
        If Not IsEmpty(Category(i)) Then
            ' 改用不带WorksheetFunction的CountIfs,无匹配时返回错误值而非抛运行时错误
            countResult = Application.CountIfs(Da, ">=" & Ar, Da, "<=" & Br, Cat, Category(i))
            ' 无匹配结果时自动赋值为0
            Cells(2, i) = IIf(IsError(countResult), 0, countResult)
        Else
            Cells(2, i) = 0
        End If
    Next i
End Sub

可选排查操作

如果修改后仍有报错,可在循环内增加Debug.Print Category(i)、Debug.Print Da.Address, Cat.Address,验证分类值和区域范围是否符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:36:03