1

いくつかの組み込み Excel 関数を組み合わせた VBA 関数を作成したいと考えています。各関数は、異なるサイズのセル範囲を 1 つ以上取ることができます [編集: SUM、COUNT、STDEV.P、AVERAGE、MIN など; ただし、これらのような不連続な範囲を取ることができる式で機能する方法を好むでしょう].

入力する範囲の数は柔軟にする必要があり、これらの引数はワークシートに直接入力されます。これは VBA の ParamArray を使用するのが最も簡単なはずですが、各セル範囲を組み込み関数に渡す方法がわかりません。これが私が試したことの簡単な例です:

Function Func1(ParamArray Ranges() As Variant)
    Func1 = Application.WorksheetFunction.Sum(Ranges)
End Function

これは、単一セルの引数では機能しますが、範囲では機能しません。たとえば、セルA1=1 とA2=2 の場合、"=Func1(A1,A2)" は 3 を=Func1(A1:A2)返しますが、#VALUE!

の各範囲をループすることを考えましたが、ループ中に組み込み関数Ranges()に引数を 1 つずつ入力する方法が思いつきません。SUM

ps - 実際には、同じ範囲のセットを持つ約 10 個の異なる関数 (合計だけでなく、そうでなければこれは些細なことです) を呼び出しています。 10 個の関数のそれぞれに入力します。

4

1 に答える 1

0

配列を反復する必要があります-例:

Function Func1(ParamArray Ranges() As Variant)
    Dim n As Long
    For n = LBound(Ranges) To UBound(Ranges)
        Func1 = Func1 + Application.WorksheetFunction.Sum(Ranges(n))
    Next
End Function
于 2021-11-22T22:56:29.567 に答える