2011-12-20 24 views
1

私は、セルの配列の合計を計算する関数を持っています。この関数は非常に頻繁に別のサブルーチンで呼び出されるため、本当に速くなければなりません。まず、for-loopを使って数字を取得しましたが、遅すぎました。それからワークシート機能を使いたかったのですが、これは未知の理由では機能しません。関数のコードは次のとおりです。excel vba worksheetfunction.sum

この結果を得るには、より良い/より速い方法がありますか?

+1

'MMDRow()'とは何ですか?スクリーンショットや、あなたが達成したいと思っているものの実例を見て​​みると便利でしょう:) – brettdj

+0

私は、セルに特定の名前があるすべての丸数字の配列を取得します。しかし、これは他の行の合計のためのセルを含んでいるので、私はこの名前が最後の行を必要としません。この関数は、毎月の列の人日の合計を計算します。この値が最大許容値を超えている場合は、この列の値を小さくする必要があります。すべての減少の後、私は合計が最大許容値に等しいかどうかをチェックする関数を呼び出します。したがって、それは本当に速くなければなりません。私はこれが役立つことを願っています – user366121

+0

MMDRow()は、合計を超える行を取得する別の関数です。 – user366121

答えて

2

ここで試してみてください。最も難しい部分は、合計したい最後の行を見つけることです。この最初の試みがあなたのケースを解決しない場合は、これが私たちが作業すべき場所だと思います。

Function CalcMD(rownumbers, colnumber) 

    Dim MMDRow As Integer, iMaxRow As Integer 
    Dim SearchRange As String 

    MMDRow = MMDRow() 

    'Find the last row where you want to sum the data 
    iMaxRow = WorksheetFunction.Min(MMDRow - 1, WorksheetFunction.Max(rownumbers)) 

    CalcMD = WorksheetFunction.Sum(Cells(iMaxRow, colnumber)) 

End Function 

もJMAXのアプローチを使用して、ここでチェックし、多くのエラー(特に入力データをチェックする)

+0

こんにちは、私はあなたのコードを試して、あなたは合計があるセルを見つけることを試みているので、動作しません。私はこの細胞を探したくありません。最後の行の数式がそれに応じて更新されない可能性があるため、実際には合計が何であるかをrowarrayで計算したいと思います。私はすべての行を繰り返し、すべての値を追加し、合計を取得する必要があります。 – user366121

+0

私は良いアイデアがあると思います。私は差を計算し、関数を一度呼び出してから差がゼロになるまでします。 – user366121

1

が存在しないことに注意してください。

Function CalcMD(rownumbers, colnumber) 

    Dim MMDRow As Integer, iMaxRow As Integer 
    Dim SearchRange As String 

    MMDRow = MMDRow() 

    'Find the last row where you want to sum the data 
    iMaxRow = WorksheetFunction.Min(MMDRow - 1, WorksheetFunction.Max(rownumbers)) 

    CalcMD = WorksheetFunction.SumIF(Cells(iMaxRow, colnumber),">0") 

End Function 

は、あなたが探しているものということですか?