在Excel VBA中设置循环以重复总结特定范围

时间:2016-07-25 18:38:55

标签: excel vba loops

我有一个电子表格,我试图在E列中重复填充来自不同但相似点(每次迭代80个单元格)的特定数据的列K.

所以K2应该例如显示E25 + E35 + E42 + E56 + E63的总和。

然后K3应显示E105 + E185 + E122 + E136 + E143的总数。

我写了一个宏,它执行第一步(并且有效),如下所示:

Sub disctoptest()

Dim source As Range
Dim destination As Range
Dim total As Long

Set destination = Range("K2")
Set source = Range("E25")

total = WorksheetFunction.Sum( _
source.Value + _
source.Offset(10, 0).Value + _
source.Offset(17, 0).Value + _
source.Offset(31, 0).Value + _
source.Offset(38, 0).Value)

destination.Select

destination.Value = total

Set source = Nothing
Set destination = Nothing

End Sub

然后我插入一个循环来重复整个数据库的操作,但每当我运行添加的宏excel要么冻结或只是拒绝工作。这是我用来循环的代码:

Sub disctop()

Dim source As Range
Dim destination As Range
Dim total As Long

Set destination = Range("K2")
Set source = Range("E25")

Do until destination.offset(0, -1) = ""

destination.Select

total = WorksheetFunction.Sum( _
source.Value + _
source.Offset(10, 0).Value + _
source.Offset(17, 0).Value + _
source.Offset(31, 0).Value + _
source.Offset(38, 0).Value)

destination.Value = total

source = source.Offset(80, 0)
destination = destination.Offset(1, 0)

Loop

Range("A1").Activate

Set source = Nothing
Set destination = Nothing

End Sub

如果使用不同类型的循环可能更容易,我需要在K列中重复操作680次。

非常感谢任何提示和建议!

1 个答案:

答案 0 :(得分:0)

您需要对范围变量使用SET以使其更改为引用的单元格:

Set source = source.Offset(80, 0)
Set destination = destination.Offset(1, 0)

另外

destination.offset(0, -1) = ""将永远不会返回true,因为即使所有五个引用都为空,SUM函数也将返回0。

因此,您需要测试其他内容,例如:Total = 0

或者您可以使用以下公式执行此操作:

 =INDEX(E:E,25+((ROW(1:1)-1)*80)) +INDEX(E:E,35+((ROW(1:1)-1)*80)) +INDEX(E:E,42+((ROW(1:1)-1)*80)) + INDEX(E:E,56+((ROW(1:1)-1)*80)) +INDEX(E:E,63+((ROW(1:1)-1)*80))

放入K2并复制。