Sumif在多张表格上的总和

时间:2013-09-17 20:04:31

标签: excel vba excel-vba

我知道我没有正确地做到这一点,但我是VBA初学者,并且我试图在工作簿中的多个工作表上执行值的sumif,然后返回这些sumif的总和。

这是我试过的方式,但我得到一个#NAME?错误,不知道从哪里开始。

Public Function Lookup(x As Long) As Long

Dim sh As Worksheet, wb As Workbook, arr() As Variant

Set wb = Workbooks.Open("Purchased.xlsm")

For Each sh In wb
    arr() = Application.SumIf(Range("A1:A10000"), x, Range("B1:B10000"))
Next

Lookup = Application.WorksheetFunction.Sum(arr())

End Function

我无法让这个工作,它返回一个#VALUE!错误,但我认为这可能更接近我的需要:

Public Function AddItUp(x As Long) As Long
Dim sh As Worksheet, wb As Workbook, RunningSum() As Variant
Dim i As Long, j As Long
Set wb = Workbooks.Open("Week1Input.xlsm")
j = wb.Worksheets.Count
ReDim RunningSum(1 To j)
For i = 1 To j
    RunningSum(i) = Application.SumIf(wb.sh(i).Range("A1:A10"), x, wb.sh(i).Range("B1:B10"))
Next i
AddItUp = Application.WorksheetFunction.Sum(RunningSum)
End Function

2 个答案:

答案 0 :(得分:1)

您无法为空数组指定值。将arr()更改为可以保存该值的内容。此外,Lookup是excel中的内置函数名称,它让excel(和其他用户)感到困惑

Public Function AddItUp(x As Long) As Long
Dim sh As Worksheet, wb As Workbook, RunningSum As Variant
Set wb = Workbooks.Open("Purchased.xlsm")
RunningSum=0
For Each sh In wb
    RunningSum = RunningSum + _
        Application.SumIf(Range("A1:A10000"), x, Range("B1:B10000"))
    'line broken for readability
Next
AddItUp = RunningSum
End Function

答案 1 :(得分:0)

我最后只是将工作簿组合在一起,因为这是我能够让它工作的唯一方法:

Public Function AddItUp(x As Long) As Long
Dim RunningSum() As Variant
Dim i As Long, j As Long
j = ActiveWorkbook.Worksheets.Count
ReDim RunningSum(3 To j)
For i = 3 To j
    RunningSum(i) = Application.SumIf(Worksheets(i).Range("A1:A10000"), x, Worksheets(i).Range("B1:B10000"))
Next i
AddItUp = Application.WorksheetFunction.Sum(RunningSum)
End Function