【问题标题】:Sum across multiple columns and variable row跨多列和变量行求和
【发布时间】:2020-05-24 10:42:55
【问题描述】:

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

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

【问题讨论】:

    标签: excel vba variables sum row


    【解决方案1】:
    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 函数将返回 0。

    【讨论】:

      【解决方案2】:

      这里有几种方法可以做到这一点:

      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
      

      有些比其他更快,有些更具可读性和适应您的场景...

      【讨论】:

        【解决方案3】:

        总和

        简答

            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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-06
          • 2019-12-11
          • 2019-04-12
          • 2019-10-07
          相关资源
          最近更新 更多