0

私はこれを適切に行っていないことを知っていますが、私は 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
4

2 に答える 2

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
于 2013-09-17T20:10:41.930 に答える