VBA中如何使用COUNTA与INDIRECT函数直接给变量赋值
VBA实现方案
你可以直接调用VBA内置的工作表函数能力实现赋值需求,无需将公式写入单元格,行号可定义为变量灵活调整,以下是两种常用实现方式:
方式1:调用工作表函数接口(推荐)
无需沿用公式里的INDIRECT逻辑,VBA原生支持通过字符串拼接直接引用指定单元格:
Dim row_num As Long ' 存储你实际需要的行号,即原公式中的示例值2 row_num = 2 ' 此处可修改为任意所需数值 ' 直接将计算结果赋值给已声明的num_d变量 num_d = WorksheetFunction.CountA( _ Sheets("Sheet1").Range("A" & row_num), _ Sheets("Sheet1").Range("B" & row_num), _ Sheets("Sheet1").Range("C" & row_num) _ )
方式2:使用Evaluate方法直接计算公式字符串
如果你不想改写原有工作表公式的逻辑,可直接传入公式字符串计算结果:
Dim row_num As Long row_num = 2 num_d = Evaluate("COUNTA(Sheet1!A" & row_num & ",Sheet1!B" & row_num & ",Sheet1!C" & row_num & ")")
注意事项
- 两种方式都可以直接得到和工作表公式一致的计算结果,无需写入任何单元格
- 如果需要兼容统计无有效值的场景,可以把
WorksheetFunction.CountA替换为Application.CountA,前者无匹配结果时会直接抛出运行时错误,后者会返回错误值方便后续做容错判断 - 请提前确认
Sheet1工作表名称拼写正确,否则会触发运行时错误
内容的提问来源于stack exchange,提问作者MConvery
相关产品推荐
相关产品推荐

