2016-03-30 17 views
3

配列を受け入れるVBA関数があります。A1:A10などの参照を渡すとうまくいきます。 A1:A10+1またはA1:A10^2のような "formula"引数を受け入れない場合、結果のセルには#VALUEが含まれます。Excel VBA:計算結果の配列を関数の引数として渡す

X引数の4つの列を手動でリストすることなく、次の式を書くことができるlinest(...)など、多くのExcel関数がこれをサポートしています。

 =LINEST(B1:B10, A1:A10^{1,2,3}) 

私の関数の宣言は次のとおりです。私は式を評価し、関数に結果を渡すためにExcelを期待してい

 Function FFT(ByRef A) As Variant 

。これはExcel VBAでは不可能ですか?

答えて

1

別のVBAサブルーチンまたは関数から関数を呼び出す場合、Excelは範囲計算を解釈しません。関数を呼び出す前に、範囲内のデータ操作を自分で実行する必要があります。

ただし、ワークシートのセルからUDFとして関数を使用している限り、Excelは範囲パラメータを説明するときに解釈します。範囲に計算を適用する際の注意点は、配列式としてExcelに「タグ付け」し、セル式を完成させるにはcontrol-shift-enterと入力する必要があります。

は、この設定を考えてみましょう:

Option Explicit 

Public Function CalculateThis(inRange) As Double 
    Dim answer As Double 
    answer = 0# 
    CalculateThis = answer 
End Function 

enter image description here

範囲パラメータA1:E1は、予想通りでVariant/Object/Rangeています。 VBAエディタで[表示] - [ローカル]ウィンドウを使用して表示します。あなたが前に範囲に計算を適用したい場合

enter image description here

さて、それはあなたがまだすることができ、あなたの関数になります。

=CalculateThis(A1:E1^2)を考えてみましょう。あなたが期待するのは、それぞれの値が2乗された5つの値の配列です。しかし、単純にenterと入力してこの式を入力すると、配列の代わりに1つの値が得られます。 (値は9である理由を説明することができる人にボーナスポイント)

enter image description here

しかしcontrol-shift-enterと同じ式を入力し、各値の二乗であなたは、5つの値の予想される配列を取得。

enter image description here

あなたの範囲と配列の計算が非常に一致しない場合は、いくつかのエラー条件をチェックする必要があります。たとえば=CalculateThis(A1:E1^{1,2,3,4,5})について(control-shift-enterで入力された)あなたが期待取得します。

enter image description here

しかし=CalculateThis(A1:E1^{1,2,3})ない:

enter image description here

(バリアント配列のエラーが文字列である "エラー2042" という確認できます)

関連する問題