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()
の部分で「配列には割り当てできません」とエラーが出てしまいます。
色々試してはみたのですが、どうも解決できません。
ヒントだけでも構いませんのでご助力お願いします。
No.3ベストアンサー
- 回答日時:
「配列には割り当てできません」というエラーは
Dim inpt(3) As String
ReDim inpt(4)
とするのと同じエラーですから、
「宣言時に要素数を定義した配列は要素数を変更することができない」
ということですね。
Excel などの VBA では関係ないかもしれませんが、
CやC++では Static 変数や要素数が決まっている配列が割り当てられるメモリ領域と、動的に( VB の ReDim のような方法で)割り当てられるメモリ領域は異なっていて、別々に管理されています。おそらく開発ツールの VB ( VBA ではない)もC/C++と同じメモリ管理手法を取っていると思われるのですが、この仕様はそのあたりから来たものではないかと思います。
( 「VBA では VB とは違って宣言時に要素数を定義した配列を ReDim できる」ようにできなくもないような気もするのですが・・・)
何にしろ、そういう仕様だから、ということには間違いないと思います。
なるほど…そういう事でしたか。
以前に動的に配列の要素数を変更したくて
Dim inpt(3) As String
ReDim inpt(4)
と同じような事をやってエラーが出ていた事を思い出しました。
その際には
Dim inpt() As String
ReDim inpt(4)
で解決できていたのに…
もうちょっと学習しながらコーディングするべきですね。反省です。
他の言語を例に出して頂き、非常に分かりやすかったです。
ありがとうございました。
No.2
- 回答日時:
あー、聞かれると思ったけど、
私はわかりません。
詳しい人の回答待ってみて。
個人的には、getArgで返ってくる配列の個数が
確定しない場合もあるので、そういう仕様に
なってるんだと思うけど。
GuruGuru22さんの仰っている内容で合ってるのでは、と
素人なりに思いましたが、そういう内部に詳しい方が回答して下さるのを
首を長くして待とうと思います。
GuruGuru22さん、ご回答頂いて本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
C# 配列の変数宣言について。
-
配列の参照渡しで型が一致しま...
-
配列で格納したものをmsgboxで...
-
【C言語】配列の中に配列を入れ...
-
先頭アドレスとは何ですか?
-
C# Listを使わずに2次元配列の...
-
配列を使わずに、変数名を動的...
-
C言語で特定列だけを抽出して配...
-
配列を含む構造体の初期値について
-
Redimした動的配列はEraseする...
-
if文の判定条件に配列
-
C言語の配列番号が"0"から始ま...
-
VBAで配列からbmp画像を出力す...
-
複数の選択範囲の行番号を個別...
-
VB.netでRadioButtonを配列にし...
-
unsigned char配列への入力の仕方
-
配列内の文字間を排他的論理和...
-
配列同士の文字列の比較
-
C言語初心者 構造体 課題について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
先頭アドレスとは何ですか?
-
配列で格納したものをmsgboxで...
-
C# Listを使わずに2次元配列の...
-
C# 配列の変数宣言について。
-
テキストファイルから文字列を...
-
配列の参照渡しで型が一致しま...
-
ExcelVBAで質問です。離れた二...
-
unsigned char配列への入力の仕方
-
VBで構造体の配列を関数に渡す...
-
C++ vectorに配列をプッシュしたい
-
C言語で特定列だけを抽出して配...
-
複数の選択範囲の行番号を個別...
-
Excel、VBAのユーザーフォーム...
-
配列をEraseしてもメモリが開放...
-
配列を含む構造体の初期値について
-
【速いブラインドタッチ】手を...
-
Redimした動的配列はEraseする...
-
C言語 配列の再初期化
おすすめ情報