如何在VBA中组合间接引用和直接引用?

时间:2018-06-18 18:54:09

标签: vba excel-vba sum excel-indirect excel

问题: 我需要调用直接和间接引用。每次程序运行时,我都会向右移动一列。该列用于收集前面列的总和。 (我知道我可以将with1中的sheet1组合在一起,但是在with和sheet select之间有一些代码片段,这个特定的问题只关注.value部分。)

代码1:

Sheets("Sheet1").Select
With Range("AL2")
.Value = "=SUM(B2:RC[-1])"
End With

B2作为字符串插入,而不是作为单元名称插入。

我也尝试过:

Sheets("Sheet1").Select
With Range("AL2")
.Value = "=SUM(range("B2") & ":RC[-1])"
End With

Sheets("Sheet1").Select
With Range("AL2")
.Value = "=SUM("& B2 & ":RC[-1])"
End With

这组特殊代码无法正常运行并返回:

  

语法错误

1 个答案:

答案 0 :(得分:3)

因此,在这个特定实例中的问题是您正在混合R1C1和A1样式表示法。

无论如何,我会更改你的代码来设置.Formula属性而不是.Value属性,如果你想使用那种表示法,或者将它保留为。表示法,则将其更改为.FormulaR1C1。

无论如何,您的原始代码:

Sheets("Sheet1").Select
With Range("AL2")
    .Value = "=SUM(B2:RC[-1])"
End With

这是将B2设置为字符串,因为Excel正在识别RC表示法,正确地解释“RC [-1]”是单元格引用,但后来却不理解“B2”的含义。

所以,我会用这样的东西:

With Sheets("Sheet1").Range("AL2")
    .FormulaR1C1 = "=SUM(R2C2:RC[-1])"
End With

然而,这将留下$ B $ 2作为绝对单元格引用,而AK2作为相对引用,这有点粗略。根据您的需要,您可以这样做:

With Sheets("Sheet1").Range("AL2")
    .FormulaR1C1 = "=SUM(R2C2:R2C37)"
End With

这将导致两者都是绝对引用。

如果你想要更动态的东西,你需要对你输入到工作表中的字符串使用字符串操作。例如,如果您将r1作为范围对象(地址为B2)并将r2作为范围对象(地址为AK2),则可以执行以下操作:

With Sheets("Sheet1").Range("AL2")
    .Formula = "=SUM(" & r1.address ":" & r2.address & ")"
End With

如果您有任何疑问,请与我们联系。