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

VBA COUNTIF自定义日期格式问题:指定年份单元格计数返回0

解决Excel VBA统计指定年份单元格数量返回0的问题

问题原因

  1. 未使用Set关键字赋值Range对象:原代码中yrRange = ThisWorkbook.Worksheets("Summary Tab").Range("A8:AE8")没加Set,导致yrRange被赋值为单元格的数值数组,而非Range对象,后续工作表函数无法正确识别引用。
  2. 工作表函数无法直接识别VBA变量:Application.Evaluate的字符串参数里直接用了VBA变量yrRange和yr,但工作表环境不认识这些变量,必须把变量值嵌入到表达式字符串中。

解决方案

方法一:修正Evaluate表达式写法

通过将Range对象的外部地址和年份数值拼入表达式字符串,让工作表函数能正确识别:

Dim yrRange As Range
Dim yr As Integer
Dim CountMonths As Long

Set yrRange = ThisWorkbook.Worksheets("Summary Tab").Range("A8:AE8")
yr = 2023
CountMonths = Application.Evaluate("SUM(IF(YEAR(" & yrRange.Address(External:=True) & ")=" & yr & ",1,0))")

方法二:遍历单元格逐个判断

这种方式逻辑更直观,还能提前过滤非日期单元格,避免报错:

Dim yrRange As Range
Dim yr As Integer
Dim CountMonths As Long
Dim cell As Range

Set yrRange = ThisWorkbook.Worksheets("Summary Tab").Range("A8:AE8")
yr = 2023
CountMonths = 0

For Each cell In yrRange
    If IsDate(cell.Value) Then
        If Year(cell.Value) = yr Then
            CountMonths = CountMonths + 1
        End If
    End If
Next cell

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 03:27:07