簡體   English   中英

Application.WorksheetFunction.Sum在循環中

[英]Application.WorksheetFunction.Sum within a loop

我有這個代碼從sql查詢中檢索一些數據並將其放在Excel工作表中:

   I = 4
 Do While Not rs.EOF
  I = I + 1
  Sheet1.Range("A" & I).Value = rs(0)
  Sheet1.Range("B" & I).Value = rs(1)
  Sheet1.Range("C" & I).Value = rs(2)
  Sheet1.Range("D" & I).Value = rs(3)
  Sheet1.Range("E" & I).Value = rs(4)
  Sheet1.Range("F" & I).Value = rs(5)
  Sheet1.Range("G" & I).Value = rs(6)
  Sheet1.Range("H" & I).Value = rs(7)
  Sheet1.Range("I" & I).Value = rs(8)
  Sheet1.Range("J" & I).Value = rs(9)
  Sheet1.Range("K" & I).Value = rs(10)
  Sheet1.Range("L" & I).Value = rs(11)
  Sheet1.Range("M" & I).Value = rs(12)
  Sheet1.Range("N" & I).Value = rs(13)
  Sheet1.Range("O" & I).Value = rs(14)
  Sheet1.Range("P" & I).Value = rs(15)
  Sheet1.Range("Q" & I).Value = Application.WorksheetFunction.Sum(Sheet1.Range("E" & I), Sheet1.Range("P" & I))
  'Sheet1.Range("Q" & I).Value = Sheet1.Range("E" & I).Value + Sheet1.Range("F" & I).Value + Sheet1.Range("G" & I).Value + Sheet1.Range("H" & I).Value
  rs.MoveNext
 Loop

現在,我試圖將一系列列從col“E”加到col“P”但是它不起作用,它只是對這些單元格求和(“E”和“I”和“P”和I),而不是范圍。

有什么幫助嗎?

首先,您可以使用with語句優化和清理代碼:

使用with清理代碼

不要這樣做

Sheet1.Range("A" & I).Value = rs(0)
Sheet1.Range("B" & I).Value = rs(1)
Sheet1.Range("C" & I).Value = rs(2)
...

With Sheet1
    .Range("A" & I).Value = rs(0)
    .Range("B" & I).Value = rs(1)
    .Range("C" & I).Value = rs(2)
    ...
End With

求和范圍而不是單元格

了解您的原始陳述

在您的原始聲明中:

Application.WorksheetFunction.Sum(Sheet1.Range("E" & I), Sheet1.Range("P" & I))

您正在使用多個參數調用Worksheet函數(就像使用SUM(E1, P1)但是您想要求和一個范圍,即SUM(E1:P1)

解決您的問題

更好的嘗試:

Application.WorksheetFunction.Sum(Sheet1.Range("E" & I & ":P" & I))

請注意,您也可以通過以下方式定義Range:

With Sheet1
    Application.WorksheetFunction.Sum(.Range(.Cells(I, "E"), .Cells(I, "P"))
End With

后者非常有用,因為您可以使用帶字母或長.Cells

為什么不使用循環而不是這么長的代碼

Option Explicit

Sub Sample()
    Dim i As Long, j As Long, k As Long

    '~~> Rest of your code

    Do While Not rs.EOF
        i = i + 1
        j = 0
        With Sheets1
            k = 1
            For j = 0 To 15
                .Cells(i, k).Value = rs(j)
                k = k + 1
            Next
            .Range("Q" & i).Value = _
            Application.WorksheetFunction.Sum(.Range("E" & i & ":P" & i))
        End With
        rs.MoveNext
     Loop

     '~~> Rest of your code
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM