Excel の範囲をユーザー定義関数に渡す最適な方法は何ですか?

Excel の範囲をユーザー定義関数に渡す最適な方法は何ですか?

Excel スプレッドシートからの大きな範囲を、VBA で記述されたユーザー定義関数 (UDF) のパラメーター ExcelRange に渡します。

  1. パラメータ ExcelRange As Range を宣言し、それを Variant に変換できます:
    Dim VariantArray As Variant
    VariantArray = ExcelRange.Value2

または

  1. UDF のパラメーター ExcelRange を Variant として直接宣言できます。

どちらの場合でも、ループ内で、VariantArray または ExcelRange の各要素を Double 変数に変換します。

1. と 2. のどちらの方が時間効率が良いでしょうか?

答え1

どちらの場合でも、ループ内で VariantArray の各要素を Double 変数に変換します。1
. と 2. のどちらがより効率的でしょうか?

いずれにせよ、範囲を Variant に変換すると、パフォーマンスに大きな違いは見られません。
変換してから渡すか、渡してから変換するかは、同じ労力で済みます。

違いは UDF の使用方法にあります。

  • 範囲を使って何かする必要がある場合(例えば、アドレスを取得するなど)、明らかにRange引数を取る必要があります。
  • ユーザーが範囲ではなく配列を渡すことが予想される場合は、引数を Variant ( =SUM({1,2,3})Excel の有効な数式など) として宣言することをお勧めします。

関連情報