如何在VBA中实现SUMPRODUCT(--(LEN(A1:A100)>0))公式并解决类型不匹配错误
问题原因
- VBA内置函数
Len不支持直接对多单元格Range返回数组结果,传入多单元格区域时只会读取第一个单元格的内容返回单个长度值,后续的判断和--强制转数值的逻辑都无法像工作表公式一样对整个区域生效,直接触发类型不匹配错误。 WorksheetFunction.SumProduct的参数要求为数值数组/数值区域,传入不符合格式的参数也会触发报错。
可用解决方案
方法1:使用Evaluate直接调用工作表公式(最简便)
直接通过工作表对象的Evaluate方法执行现成的工作表公式,完全兼容公式原有逻辑:
Dim 非空单元格数量 As Long 非空单元格数量 = Worksheets("Sheet1").Evaluate("SUMPRODUCT(--(LEN(A1:A100)>0))")
注意要使用对应工作表的Evaluate方法,不要直接用全局的Evaluate,避免当前活动工作表不是Sheet1时引用出错。
方法2:VBA原生遍历实现(兼容性更好,适合复杂逻辑扩展)
如果不想调用工作表函数,可以直接遍历区域统计符合条件的单元格:
Dim 非空单元格数量 As Long Dim cell As Range 非空单元格数量 = 0 For Each cell In Worksheets("Sheet1").Range("A1:A100") If Len(cell.Value) > 0 Then 非空单元格数量 = 非空单元格数量 + 1 End If Next
内容的提问来源于stack exchange,提问作者Fighter Jet
相关产品推荐
相关产品推荐

