跨多列和可变行求和

Sum across multiple columns and variable row

我需要从 F 列到 P 列的每一行的总和。经过很多错误,我终于得到了这样的结果:看代码,现在它没有给我一个错误,但是它不起作用;当我使用 f8 浏览代码时,我发现它保持为零,即使 sheet 中的行总和不为零。

dim i as integer
For i = 2 To numrows
som = Application.WorksheetFunction.sum(Reservationsheet.Cells(i, 6), Reservationsheet.Cells(i, 15))

I've already tried:
som = Application.WorksheetFunction.sum(Range(Cells((i), "F"):((i), "P"))) &
som = Application.WorksheetFunction.sum(Range(Cells(("F" & i):( "P", i))) 'etc, but here i get error messages

Thanks in advance

Application.WorksheetFunction.sum(Reservationsheet.Cells(i, 6), Reservationsheet.Cells(i, 15))

就像在工作表上写:SUM(Fn,On)。换句话说,您只添加了两个单元格。

要添加范围,您需要指定整个范围,例如:

Application.WorksheetFunction.Sum(Range(Reservationsheet.Cells(i, 6), Reservationsheet.Cells(i, 15)))

并且 Sum 函数将 return 0 如果您的数字确实是数字的文本表示,而不是实数。

这里有几种实现方法:

Dim i as Long
For i = 2 To numrows
    With Reservationsheet
        Dim v As Variant
        'v = .Evaluate("SUM(F" & i & ":P" & i & ")")
        'v = Application.WorksheetFunction.Sum(Application.Intersect(Rows(i), .Range("F:P")))
        v = Application.WorksheetFunction.Sum(.Range(.Cells(i, "F"), .Cells(i, "P")))
    End With

有些比其他的更快,有些更易读,更适合您的场景...

总和

简答

    som = Application.WorksheetFunction.Sum(ReservationSheet _
      .Range(ReservationSheet.Cells(i, 6), ReservationSheet.Cells(i, 16)))

代码

Option Explicit

Sub SumAcrossUseful()
    Dim ReservationSheet As Worksheet
    Dim LastRow As Long
    Dim i As Long

    Dim som As Double

    Set ReservationSheet = ThisWorkbook.Worksheets("Reservation")

    LastRow = 5
    For i = 2 To LastRow
        som = Application.WorksheetFunction.Sum(ReservationSheet _
          .Range(ReservationSheet.Cells(i, 6), ReservationSheet.Cells(i, 16)))
        Debug.Print som
    Next i

End Sub

Sub SumAcrossMoreUseful()

    Const SheetName As String = "Reservation"
    Const FirstCol As Long = 6 ' "F"
    Const LastCol As Long = 16 ' "P"

    Dim ws As Worksheet
    Dim rng As Range
    Dim i As Long
    Dim LastRow As Long
    Dim som As Double
    Dim tot As Double

    Set ws = ThisWorkbook.Worksheets(SheetName)

    LastRow = 5
    For i = 2 To LastRow
        Set rng = ws.Range(ws.Cells(i, FirstCol), ws.Cells(i, LastCol))
        som = Application.WorksheetFunction.Sum(rng.Value)
        Debug.Print "Sum   = " & som
        tot = tot + som
    Next i
    Debug.Print "Total = " & tot

End Sub