Function 设置范围';VBA中的动态s函数

Function 设置范围';VBA中的动态s函数,function,vba,excel,Function,Vba,Excel,例如,如果我有数据 A B C 1|0 0 2|0 1 3|1 1 我想把C列设为A和B的和,我会使用这个函数 C1=SUM(A1:B1) 等等。。。 得到 在VBA中,我可以从0迭代到2,并分别设置它们 'iterating on i Cells(i, 3).FormulaR1C1 = _ "=SUM(R" & i & "C" & 1 & ":R" & i & "C" & 2 & ")" 但是,有没有一种方

例如,如果我有数据

  A B C
1|0 0 
2|0 1 
3|1 1 
我想把C列设为A和B的和,我会使用这个函数

C1=SUM(A1:B1)
等等。。。 得到

在VBA中,我可以从0迭代到2,并分别设置它们

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

但是,有没有一种方法可以做到这一点而无需迭代?我刚开始使用VBA,但似乎有一种简单的方法可以选择一系列单元格,并根据设置的单元格的行或列设置公式1C1 R或C字段。

您可以使用R1C1表示法:

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
ws.Range("C1:C3").FormulaR1C1 = "=SUM(RC1:RC2)"
您必须使用
.formula1c1
才能使其生效


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

以下方法不使用
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
让我们知道这是否有帮助

编辑:

为了证明,这里有一个截图:


原因与自动填充的性质非常相似:Excel会立即调整公式以适应给定的范围。

是否在拖动公式时尝试录制宏?同意@mehow。录制一个宏,并尝试在执行操作时(通过VBE)观察代码的增长。此外,还有一个提示供您继续:不要使用
公式1c1
。改用
Formula
。我试着录制了一个宏,但它没有完成我需要它做的事情。我如何用公式替换公式1C1?有时我还需要将数字翻译成列名。@Nanashi在公式中使用R1C1表示法时,必须使用
.FormulaR1C1
,它才能工作。@D_Bester。这很明显——我想暗示的是,他不需要使用
R1C1
。他甚至不需要使用
AutoFill
(尽管这是最安全的方法)。谢谢!这似乎正是我要问的。我现在只需要尝试一下。这不是把公式设置为A1:B1的静态和,而不是A和B的行吗?那么公式=“和(A)&LRow&“B”&LRow&“:)”?同样,我不知道如果列是正在更改的列,如何使用此if公式而不是公式1C1。我觉得这就是公式1C1存在的原因。它之所以有效,是因为Excel假定您要使用相对引用,它会自动填充,而无需您显式地执行。啊,很高兴知道这一点。我没想到excel会做出这样的假设(我不太使用excel或VBA)。这比自动填充代码更清晰。谢谢
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