总结范围在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行以上的大型项目的testing,这就是为什么我不想手动完成这些项目的原因。

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

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

编辑1:避免像马克·巴尔霍夫指出的循环引用

 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 

以下是你如何做一个数组函数:

 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]" 

你可以做一个自定义的公式来做到这一点。

例如,你想总结A1:A10B1: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