配列の受け渡し6.配列の受け渡し配列のデータは、SubプロシージャやFunctionプロシージャの引数、およびFunctionプロシージャの戻り値として、プロシージャ間で相互に受け渡すことができます。配列の代入と同様、渡す側と受ける側の配列のデータ型は、必ず同じにする必要があります。このことはバリアント型の配列であっても同様ですが、受ける側の引数をバリアント型の変数として指定すれば、渡す側の配列のデータ型に関わらず、受け取ることが可能です(もちろん配列以外も受け取れます)。プロシージャを記述する際の引数として配列を指定する場合、固定長配列にすることはできません。ByVal型の引数も不可で、必ずByRef型(指定を省略した場合はByRef型になります)にする必要があります。Integer」などの末尾に「()」を付けるか、バリアント型にします。次のコードは、Subプロシージャ「test1」で作成した配列を引数としてFunctionプロシージャ「test2」を呼び出し、その戻り値である配列の2番目の要素を表示します。FunctionFunctionプロシージャ「test2」は次のように書くこともできます。b()」の部分で配列変数に付けている空のカッコは、省略も可能です。Functionプロシージャ「test2」の引数をバリアント型の変数にする場合は、次のような書き方になります。このコードでは、プロシージャ名への代入(戻り値の指定)の際、変数「b」の後にカッコを付けないようにします。FunctionFunctionプロシージャをユーザー定義関数として利用することにより、ワークシート上の数式との間で、配列データをやり取りすることも可能です。戻り値を配列として返すユーザー定義関数で、戻り値のすべてをワークシート上に表示したい場合はセル範囲を選択して、配列数式として確定します。Function一方、ユーザー定義関数の引数として配列を与える場合は、配列定数で指定するか、またはセル範囲に対し演算などの処理を行って配列数式にします。単なるセル範囲は、配列とは見なされません。配列を受け取るFunctionプロシージャ側では、引数の配列のデータ型は、必ずバリアント型にする必要があります。引数を配列ではなくバリアント型の変数にすると、数式で指定された引数がセル範囲の場合にも対応しやすくなります。引数として配列を受け取る場合、ここで説明したケースと同様、インデックス番号の最小値が「0」ではなく「1」になる点に注意が必要です。次のFunctionプロシージャは、引数として与えられた整数の配列にそれぞれ数値を加算し、加算後の最大値を返すものです。FunctionこのFunctionプロシージャを、ユーザー定義関数として、次のような数式で使用すると、結果は#VALUE!エラーになってしまいます。=test4({3,5,1})これは、引数として与えられた配列aのインデックスの最小値が「1」であり、「a(0)」という指定が不適切であるためです。Functionプロシージャ「test4」を次のように修正すれば、同じ数式でもエラーにはなりません。Functionただし、他のSubプロシージャなどから、引数として3要素の配列を指定してこのFunctionプロシージャを呼び出すと、今度は0が最小値となるため、エラーになってしまいます。1」を指定するなどして、インデックス番号の最小値を揃えます。追加関数50』では、引数や戻り値として配列を扱うユーザー定義関数をいろいろと作成しています(ソースコードの内容については解説していませんが、コード自体は見ることができます)。詳しくはこちらをご覧ください。<5.ワークシート関数の。