在VBA中动态设置范围的功能

时间:2014-06-11 13:53:51

标签: function vba excel-vba excel

例如,如果我有数据

  A B C
1|0 0 
2|0 1 
3|1 1 

我想将C列设置为A和B的总和,我将使用函数

C1=SUM(A1:B1)

...等 得到

  A B C
1|0 0 0
2|0 1 1
3|1 1 2

在VBA中,我可以从0迭代到2并单独设置

'iterating on i
Cells(i, 3).FormulaR1C1 = _
    "=SUM(R" & i & "C" & 1 & ":R" & i & "C" & 2 & ")"

但是有没有办法在没有迭代的情况下做到这一点?我刚刚开始使用VBA,但似乎应该有一种简单的方法来选择一系列单元格,并根据正在设置的单元格的行或列设置FormulaR1C1 R或C字段。

2 个答案:

答案 0 :(得分:1)

您可以使用R1C1表示法:

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
ws.Range("C1:C3").FormulaR1C1 = "=SUM(RC1:RC2)"

您必须使用.FormulaR1C1才能生效。

SUM(RC1:RC2):没有数字的R表示使用当前行(相对引用); C1表示第一列(绝对参考); C2表示第二列(绝对参考)。这被称为混合引用,因为在同一地址中同时具有绝对引用和相对引用。

答案 1 :(得分:0)

以下方法不使用AutoFill并且不使用R1C1表示法。

Sub HereComesThePain()
    Range("C1:C3").Formula = "=SUM(A1:B1)"
End Sub

您甚至可以使其更具动态性,以容纳更多行。

Sub HereComesThePainPartTwo()
    'Get the last row in Column A. Same as pressing Ctrl-Up from the last row.
    LRow = Range("A" & Rows.Count).End(xlUp).Row
    'Substitute LRow in the respective part.
    Range("C1:C" & LRow).Formula = "=SUM(A1:B1)"
End Sub

如果有帮助,请告诉我们。

编辑:

为了证明,这是一个截图:

enter image description here

其原因与AutoFill的性质非常相似:Excel立即调整公式以适合给定范围。