編集:解決策- 以下の元の質問を参照してください
{1,2,3} のような配列を UDF に渡す際に、次の 2 つの点を考慮する必要があることがわかりました。
ロケール - 回答 1 を参照してください。ドイツ語システム (通常) のリスト区切り文字は ";" です。したがって、 {1 ;を使用する必要があります。2 ; 3}。
渡された配列は、関数内で 2 次元配列として表示されます。したがって、n 番目の要素は myArray(n, 1 )としてターゲットにする必要があります。これを無視すると、#VALUE! が得られました。エラー。
したがって、短い「ケース選択」-UDF は次のようになります。
Function SelCase(a1, a2, a3)
For i = 1 To UBound(a2)
If a2(i, 1) = a1 Then SelCase = a3(i, 1)
Next
End Function
のように呼ばれます (ドイツのロケール!):
=SelCase(A1;{1;2;3};{"a";"b";"c"})
A1 が 1、2、または 3 を保持するかどうかに応じて、結果に "a"、"b"、または "c" を指定します。
より精巧な「選択ケース」-UDF は、こちらにあります。
元の質問:
{1,2,3,4} のような配列を Excel 2002 のユーザー定義関数に渡したいのですが、これを行う方法が見つかりません。
私はドイツ語版を使用しているため、「、」は小数点記号であり、水平 (1D-) 配列の値も区切ります- 編集: これは間違っています -、「;」私の知る限り、式で呼び出される関数の引数をシートから分離し、垂直(1D-)配列の値も分離します。
私は何かを試しました
Function test(myArray)
Function test(myArray())
のようなもので
=test({1,2,3,4})
{=test({1,2,3,4})} (with ctrl+shift+enter)
私のシートでは、Excelは常に「= test({1,234})」のように数式を修正するように求めますが、これは私が望んでいるものではありません。
次のようなことを試してみると
=test({1;2;3;4})
=test(1,2,3,4)
=test(1;2;3;4) <- ok this would be for paramArray
シートの数式として #VALUE! を取得します。エラー。
最終的に、2 つの配列 (可変サイズ) と 1 つの値を 3 つの引数として渡す必要があるため、paramArray は使用できません。配列 (範囲として定義されていない) を渡すには、シートと VBA でどのような構文が必要ですか?
前もって感謝します!マーティン・リンデンラウフ
編集:
私が構築しようとしているのは、次のような「Select Case」の省略形 UDF です。
Function SelCase() As Variant
a1 = "b"
a2 = Array("a","b","c")
a3 = Array("e1","e2","e3")
For i = 0 To UBound(a2)
If a2(i) = a1 Then SelCase = a3(i)
Next
End Function
a1、a2、a3 は関数内で定義されていませんが、次のような関数呼び出しによって渡されます
=SelCase(A1;{"a","b","c"};{"e1","e2","e3"})
A1 = "a"、"b"、または "c" に応じて "e1"..."e3" を指定します。
CHOOSE() と MATCH() でこれを実現できましたが、非常に頻繁に必要です->素敵な「短いバージョン」が欲しいのですが、ところで。配列とUDFで何が間違っているのかを理解したいのですが...ありがとう。
編集2:
ここで「select case UDF」の実用的なアプローチを見つけました。一般的な問題が残っています: {1,2,3} 表記のような配列を UDF に渡す方法 (可能な場合)。