エクセルでVBAで配列を多用するほうですが、たまに「配列には割り当てられません」というエラーメッセージが出て焦る。焦ってそのときは何とかするのですが、焦って対処するので、どのようなシチュエーションでエラーが起きて、どのように解決したか覚えていない。。。
で、ちょっと調べてみました。
確かファンクションで配列を戻り値にしているときに出たような気がする。
配列をFunctionの戻り値にする場合
配列arrを文字列型で宣言し、getarrファンクションで配列を作成し、arrに代入する。→ 配列には割り当てられませんエラーが出た!

どうも要素数を先に定義するといけないみたいなので、arr(3)をarr()にしてみた。
すると、「代入式の左辺の関数呼び出しは、バリアント型またはオブジェクト型の値を返さなければなりません」という私には理解できないエラーが出た。

で、Variantにしてみたけど、やはりだめ

ならば、とFunctionの中身を変更。一時的配列変数arr_をいったん作成し、最後にarr_をgetarrに突っ込んで返す。⇒できた!めでたくarrに中身が入りました。

FunctionのVarinatの後に()をつけてみたりした。それでも大丈夫でした。

調子に乗って、もしやいけるんじゃね?と型をVariantからStringにしてみた。
それも大丈夫でした。

さらに調子に乗って、最初の宣言時に要素数を指定してみた。
⇒これはだめでした!

ちなみに途中でこんなこともやってしまいました。
なんでかわからないけど、だめらしい。Function内になんども自分自身が出現してはだめなのかしら。

ようするにこうすればよいのかな
・配列をFunctionで受け取るためには、受取配列変数は要素数は固定しちゃダメ
・配列を作成するFunction内では一旦一時的な配列変数を用意し、最後に一時的配列変数をFunctionの戻り値としてfunction名に突っ込む
お読みいただきありがとうございました!
コメント