このコードは、私が取り組んでいるものの小さなサブセットです。問題を次の部分に絞り込みました。このUDFSampleFunctionがあり、これに配列{3;4}を唯一の引数として渡す必要があります。
Function SampleFunction(InputVar As Variant) As Integer
SampleFunction = InputVar(LBound(InputVar))
End Function
私はこのUDFを2つの異なる方法で呼んでいます。まず、VBAを介して
ケース1:
Sub testSF()
MsgBox SampleFunction(Array(3, 4))
End Sub
そして第二に、私のエクセルワークシートを通して
ケース2:
={SampleFunction(ROW(3:4))}
->すなわち配列関数として。
問題:
UDFはケース1、つまりVBAを介した呼び出しで機能#VALUE
しますが、Excelワークシートを介して呼び出すと、ケース2でエラーが発生します。
ケース2でF8を使用して関数をステップ実行しましたが、Lbound(InputVar)
1と評価されます(ケース1のサブからの呼び出しとは異なり、0と評価されます)がInputVar(Lbound(InputVar))
、ケース2では「添え字が範囲外です」エラーが表示されます。
私が知りたいのは、ワークシート、つまりケース2からSampleFunction関数を呼び出して、上記のケース1と同じ動作をする方法だけです。Lbound(InputVar)
ボーナスとして、誰かが上記の場合になぜ異なる評価をするのか説明できればいいのですが。
その他の詳細:
いくつかの正規表現操作を実行するためにUDFを構築しています。上記の引数InputVar
は、x番目、y番目、z番目...の出現を指定する配列{x; y;z;...}になります。のデータ型はInputVar
Variantに保持されます。これは、数値(1つの長さの配列として)、配列、または範囲(取り込んで配列に変換)のいずれかを関数に渡せるようにするためです。
前もって感謝します!!