dポイントプレゼントキャンペーン実施中!

Excelで、ボタンが押されるとファンクションを呼び出し、
指定した文字列を文字列型の配列に格納して返す、
というマクロを作成したいのですが

―Sheet1――――――――――――
Private Sub btn_Click()
Dim inpt(3) As String
inpt = Module1.getArg()
End Sub
――――――――――――――――

―Module1―――――――――――
Function getArg() As String()
Dim ret(3) As String
ret(0) = "1番目"
ret(1) = "2番目"
ret(2) = "3番目"
getArg = ret
End Function
――――――――――――――――

inpt = Module1.getArg()
の部分で「配列には割り当てできません」とエラーが出てしまいます。
色々試してはみたのですが、どうも解決できません。

ヒントだけでも構いませんのでご助力お願いします。

A 回答 (3件)

「配列には割り当てできません」というエラーは


Dim inpt(3) As String
ReDim inpt(4)
とするのと同じエラーですから、
「宣言時に要素数を定義した配列は要素数を変更することができない」
ということですね。
Excel などの VBA では関係ないかもしれませんが、
CやC++では Static 変数や要素数が決まっている配列が割り当てられるメモリ領域と、動的に( VB の ReDim のような方法で)割り当てられるメモリ領域は異なっていて、別々に管理されています。おそらく開発ツールの VB ( VBA ではない)もC/C++と同じメモリ管理手法を取っていると思われるのですが、この仕様はそのあたりから来たものではないかと思います。
( 「VBA では VB とは違って宣言時に要素数を定義した配列を ReDim できる」ようにできなくもないような気もするのですが・・・)

何にしろ、そういう仕様だから、ということには間違いないと思います。
    • good
    • 0
この回答へのお礼

なるほど…そういう事でしたか。
以前に動的に配列の要素数を変更したくて

Dim inpt(3) As String
ReDim inpt(4)

と同じような事をやってエラーが出ていた事を思い出しました。
その際には

Dim inpt() As String
ReDim inpt(4)

で解決できていたのに…
もうちょっと学習しながらコーディングするべきですね。反省です。
他の言語を例に出して頂き、非常に分かりやすかったです。
ありがとうございました。

お礼日時:2004/07/06 00:22

あー、聞かれると思ったけど、


私はわかりません。
詳しい人の回答待ってみて。

個人的には、getArgで返ってくる配列の個数が
確定しない場合もあるので、そういう仕様に
なってるんだと思うけど。
    • good
    • 0
この回答へのお礼

GuruGuru22さんの仰っている内容で合ってるのでは、と
素人なりに思いましたが、そういう内部に詳しい方が回答して下さるのを
首を長くして待とうと思います。

GuruGuru22さん、ご回答頂いて本当にありがとうございました。

お礼日時:2004/07/05 17:56

ヒントっつーか、答えだけど。


Dim inpt() As String
にしてみそ。
    • good
    • 0
この回答へのお礼

あ、ホントですね…動きました。
物凄く迅速かつ明確な回答ありがとうございました。

そこで一つ質問させて頂きたいのですが
配列の長さを指定して宣言していたら何故いけなかったのでしょうか
少し詳しい説明頂けるとありがたいです。

お礼日時:2004/07/05 16:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!