Using SUM() in VBA

前端 未结 4 560
离开以前
离开以前 2021-01-11 11:46

If I have a set of cells in a worksheet that I want to add up, I can use the formula:

=SUM(Sheet1!A1:A10)

To do this in a sub, I would use:

相关标签:
4条回答
  • 2021-01-11 12:27
     Sub SumWorksheets()
        Dim ws As Worksheet
        Dim v As Variant
        For Each ws In ThisWorkbook.Worksheets
    '    If ws.Name <> ThisWorkbook.ActiveSheet.Name Then ' (Sum other sheets only)
        If ws.Name <> "" Then
        Application.DisplayAlerts = False
        v = v + ws.Range("B2")
        Application.DisplayAlerts = True
        End If
        Next ws
        MsgBox v
        End Sub
    
    0 讨论(0)
  • 2021-01-11 12:37

    You need to use the loop to perform the calculation across all of the sheets, it's the most efficient way by the looks of things. As mentioned above you can type each range separately instead.

    Might be worth converting the range your adding up to a double (or single, integer, etc) because sometimes VBA reads numbers as text.

    v = v + Cdbl(Sheets(i).Range("B2"))

    The reason why you're having issues with Application.WorksheetFunction.Sum("Sheet1:Sheet3!B2") is because if you type that formula into Excel, the range 'Sheet1:Sheet3!B2' won't be recognised by excel.

    To use a Application.WorksheetFunction it has to work in excel outside of VBA.

    Hope that helps.

    0 讨论(0)
  • 2021-01-11 12:41

    I was able to get it to work just by the line:

    Cells(x,y) = WorksheetFunction.sum(range(a,b:a,d))
    
    0 讨论(0)
  • 2021-01-11 12:42

    I believe the issue with the worksheetfunction.sum is that it needs arguments to evaluate not string. WorksheetFunction.Sum("Sheet1!A1:A3") fails as well. However, this succeeds

    Application.WorksheetFunction.Sum(Sheet1.Range("A1"), Sheet2.Range("A1"))
    

    The Ranges could be whatever you like.

    0 讨论(0)
提交回复
热议问题