VBA代码用于求和非常量范围内的值

时间:2014-09-05 15:45:20

标签: excel vba excel-vba excel-2013

我正在尝试创建一个宏,它将从D2中获取所有值,直到有一个空单元格,然后向下移动两步并继续循环中的此过程。我制作的代码不断添加恒定数量的单元格并向下移动,但我希望该范围是动态的。有人可以帮我这个。

Sub Macro4()
'
' Macro4 Macro
'

'
Range("D2").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "=SUM(R[-15]C:R[-1]C)"
ActiveCell.Offset(2, 0).Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "=SUM(R[-8]C:R[-1]C)"
Do
ActiveCell.Offset(2, 0).Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "=SUM(R[-8]C:R[-1]C)"
Loop Until IsEmpty(ActiveCell.Offset(2, 0))
End Sub


80
8
10
40
8
16
30
16
30
26
34
26
46
10
70

24
5
36
24
24
48
6
6


12
10
6
18
36
48
54
24

1 个答案:

答案 0 :(得分:0)

假设a是您开始使用的单元格,存储为范围,您需要以下内容

WorksheetFunction.Sum(a, a.End(xlDown))

End是等效于ctrl的代码和方向箭头。因此,我建议对此进行一些错误检查,以确保单元格不为空。

<强>更新

我的原始答案假设你想要在VBA中计算出值。根据添加的代码,我将使用以下内容:

Sub Macro4()
    Dim cell As Range
    Dim offset_rows As Long

    Set cell = Range("D2")

    Do While Not IsEmpty(cell.Offset(1, 0))
        offset_rows = Range(cell, cell.End(xlDown)).Rows.Count
        Set cell = cell.End(xlDown).Offset(1, 0)
        cell.FormulaR1C1 = "=SUM(R[-" & offset_rows & "]C:R[-1]C)"
    Loop
End Sub

请注意,我清理了录像机代码,因为selection速度很慢,并且会根据所选择的意外事件导致出现奇怪的错误。