我在显示之前做了一些计算。
"总和"尽管范围内的值,函数输出0。
sub CompileDashboard()
For i = 3 To 100
If Sheets(1).Cells(i, "A").Value = "Week 36" Then
Sheets(2).Cells(1, 1) = Application.WorksheetFunction.Sum(Range(Cells(i, "AN"), Cells(i, "BF")))
End If
Next
End sub
注意:这是对不起作用的步骤的简化。
答案 0 :(得分:1)
如果您打算 SUM “AN”和“BF”之间的所有列的行(来自Sheets(1)
),请修改您的行:
Sheets(2).Cells(1, 1) = Application.WorksheetFunction.Sum(Range(Cells(i, "AN"), Cells(i, "BF")))
为:
Sheets(2).Cells(1, 1) = Application.WorksheetFunction.Sum(Sheets(1).Range("AN" & i & ":BF" & i))
答案 1 :(得分:1)
始终为所有.Parent提供明确的Range工作表参考 Range.Cells个对象。 With ... End With statement可以轻松完成此任务,不仅可以清理代码,还可以让它运行得更快。
sub CompileDashboard()
with Sheets(1)
For i = 3 To 100
If .Cells(i, "A").Value = "Week 36" Then
Sheets(2).Cells(1, 1) = Application.Sum(.Range(.Cells(i, "AN"), .Cells(i, "BF")))
End If
Next
end with
End sub
循环的目的尚不清楚。如果只有一行带有“第36周”,那么一旦找到它就应该退出For ... Next语句;实际上,Application.Match(...)
会立即找到它。如果“第36周”有多行,则不应覆盖Sheet2上的同一单元格。
答案 2 :(得分:1)
正如评论中提到的那样:
Sheets(2).Cells(1, 1) = Application.WorksheetFunction.Sum(Range(Cells(i, "AN"), Cells(i, "BF")))
需要改为
Sheets(2).Cells(i, 1) = Application.WorksheetFunction.Sum(Range(Cells(i, "AN"), Cells(i, "BF")))
只是主题的一个变种。我真的很喜欢这种语法,但你永远不会看到它。
Sub CompileDashboard()
Dim i As Integer
With Sheets(1)
For i = 3 To 100
With .Rows(i)
If .Columns("A").Value = "Week 36" Then
Sheets(2).Cells(i, 1) = Application.Sum(.Columns("AN:BF"))
End If
End With
Next
End With
End Sub