WorksheetFunction范围的总和输出0

时间:2016-09-13 05:04:41

标签: excel vba

我在显示之前做了一些计算。

"总和"尽管范围内的值,函数输出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

注意:这是对不起作用的步骤的简化。

3 个答案:

答案 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