VBA COUNTIF自定义日期格式问题:指定年份单元格计数返回0
解决Excel VBA统计指定年份单元格数量返回0的问题
问题原因
- 未使用
Set关键字赋值Range对象:原代码中yrRange = ThisWorkbook.Worksheets("Summary Tab").Range("A8:AE8")没加Set,导致yrRange被赋值为单元格的数值数组,而非Range对象,后续工作表函数无法正确识别引用。 - 工作表函数无法直接识别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
相关产品推荐
相关产品推荐

