调用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
相关产品推荐
相关产品推荐

