跨多列和可变行求和
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
我需要从 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