在VBA中总结范围

时间:2014-07-14 22:32:34

标签: excel vba

我不是很精通编码所以这可能不是正确的术语,但我想做一个非常简单的事情,总和范围。我的意思是我想要:

Sub Test()
Range("E2:E9") = Range("D2:D9") + Range("G2:G9")
End Sub

如果我只使用:

,这样可以正常工作
Sub Test()
Range("E2") = Range("D2") + Range("G2")
End Sub

从这一切我想要发生的是让细胞E2-E9中的所有东西都等于其相对添加的D_和G_。因此E4将等于D4 + G4。

这只是对100行以上的大型项目的测试,这就是为什么我不想手动完成这些操作。

也许我需要使用某种数组添加或其他什么?我不确定。

3 个答案:

答案 0 :(得分:4)

以下是如何将其作为数组函数执行:

Range("E2:E9").FormulaArray = "=D2:D9+G2:G9"

但是数组函数可能很难处理,因此您可能只想将其作为单单元格公式执行:

Range("E2:E9").Formula = "=D:D+G:G"

Excel可以让这个公式发挥作用。如果你想明确:

Range("E2:E9").FormulaR1C1 = "=RC[-1]+RC[2]"

答案 1 :(得分:1)

使用Range Object Formula属性,如下所示:

编辑1:避免使用Mark Ba​​lhoff指出的循环引用

With Range("E2:E9")
    .Offset(0, 2).Value = .Offset(0, 2).Value '~~> avoid circular ref
    .Formula = "=D2+G2"
    .Value = .Value
    .Offset(0, -1).ClearContents
    .Offset(0, 2).Formula = "=E2" '~~> if you still want to have it reflected in G
End With

或者您可以直接将D添加到E而不使用辅助列G.

With Range("E2:E9")
    .Offset(0, -1).Copy '~~> copy what's in D
    .PasteSpecial xlPasteValues, xlPasteSpecialOperationAdd '~~> add in E
    .Offset(0, -1).ClearContents '~~> clear whatever's in D
End With

答案 2 :(得分:0)

您可以制作自定义公式。

例如你想要总和 A1:A10 B1:B10 并且需要 C1:C10 的结果(请注意你需要相同的这里的行数和垂直行

Sub AddRanges(Rng1 As Range, Rng2 As Range, ResultRng As Range)
    Dim i As Long, N As Long
    N = Rng1.Rows.Count

    For i = 1 To N
        ResultRng(i, 1).Value = Rng1(i, 1).Value + Rng2(i, 1).Value
    Next i
End Sub

此公式调用上述子例程

Sub TestMyFormula()
    Dim RngA As Range, RngB As Range, RngC As Range
    Set RngA = ActiveSheet.Range("A1:A10")
    Set RngB = ActiveSheet.Range("B1:B10")
    Set RngC = ActiveSheet.Range("C1:C10")

    Call AddRanges(RngA, RngB, RngC)

End Sub