总结范围在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: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