使用内置Excel函数查看我的简单VBA脚本

假设我有Excel文件由四个工作表组成,我们将它们命名为1,2,3和4.我要计算单元格AK10,AK25,AK40等所有值的总和,直到工作表4上的AK160,然后将其放在工作表2的单元格G23中。

这是我分配给工作表2的macros:

Sub sum_up() Dim i As Integer, s As Integer s = 0 For i = 0 To 10 s = WorksheetFunction.Sum(s, Worksheets("4").Range("AK(10 + 15 * i)")) Next i Range("G23").Value = "s" End Sub 

它以400错误结束。 我究竟做错了什么?

 Sub sum_up() Dim i As Long, s As Long s = 0 For i = 0 To 10 s = s + Worksheets("4").Cells(10 + 15 * i, "AK").Value Next i Range("G23").Value = s End Sub 

我会采取一个这样的裂缝 – 我真的使用更多的命名范围来回传递数据…:

 Sub sum_up() Dim i As Integer, s As Integer s = 0 For i = 0 To 10 s = s + Worksheets("4").Range("AK" & (10 + 15 * i)) Next I Range("G23").Value = s End Sub 

你没有说这个总结是用VBA完成的

把它放在工作表2的G23中(实际上,把它放在任何单元格中)

 =SUM('4'!AK10,'4'!AK25,'4'!AK40,'4'!AK55,'4'!AK70,'4'!AK85,'4'!AK100,'4'!AK115,'4'!AK130,'4'!AK145,'4'!AK160) 

至于你在做什么错误的代码,这部分是由@KenWhite回答

你也把字母“s”放到代码运行时可见的任何工作表的G23中

在表2中引用参考,与参考表4相同,只是上面两行

这个代码应该工作:

 Sub sum_up() Dim ws4 As Worksheet Set ws4 = ActiveWorkbook.Sheets("4") Dim rng As Range Set rng = ws4.Range("ak10") ' point to "ak10" Dim total As Long total = rng.Value Do While True rng.Select Set rng = rng.Offset(15) ' move pointer down 15 rows If rng.Row > 160 Then Exit Do ' moved past row 160 ? total = total + rng.Value Loop ActiveWorkbook.Sheets("2").Range("G23").Value = total End Sub