Sub TestB(ByVal MyArray() As Integer)
のようにして、
配列引数をByValで渡そうとすると
エラーが出てしまいます。
http://vba.doorblog.jp/archives/51291826.html
このページにあるように
variantとして渡せば
エラーは出ないのですが
byrefとして扱われてしまいます。
なぜVBAでは配列を値渡しすることができないのでしょうか?
何が問題なのでしょうか?
No.2ベストアンサー
- 回答日時:
VBで配列を引数で渡す場合、先頭のアドレス(住所)を渡しています。
(C言語のポインター)
その為、サブルーチンの引数の型は、その「アドレスを表す変数」が値渡しか参照渡しかを表すことであって、配列の中身を値渡しか参照渡しかを指定している訳ではありません。
つまり、
Sub TestB(Byref MyArray() As Integer)
※MyArray変数がByref
Sub TestB(Byval MyArray As Variant)
※MyArray変数がByval
詳しくは、以下のサイトを参考にしてみてください。
https://msdn.microsoft.com/ja-jp/library/eek064h …
No.1
- 回答日時:
言語仕様
言語的に、メモリ領域を正確にコピーするのが面倒だったんじゃないですかね。
配列やオブジェクトのようなものはすべて参照渡しです。
そもそも引数で受け取った値を直接変更するというコードはタブーなので、どっちでもいいですし、無駄なメモリ領域の消費という意味ではすべて参照渡しにしてくれた方がいいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) マクロについて教えてください。 4 2023/06/06 09:06
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
配列の参照渡しで型が一致しません。
Visual Basic(VBA)
-
VBで構造体の配列を関数に渡す方法?
Visual Basic(VBA)
-
subの配列引数をoptionalで使う方法
Visual Basic(VBA)
-
-
4
配列で格納したものをmsgboxで表示する方法について
Access(アクセス)
-
5
【Excel VBA】先頭の「0」飛びを埋める方法
Visual Basic(VBA)
-
6
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
7
VBAでワークシートを引数としてサンプル関数に渡したい
Visual Basic(VBA)
-
8
VBのFunctionで、配列を引数や返却値にできますか?
Visual Basic(VBA)
-
9
クラスのプロパティに構造体を使いたい。
Visual Basic(VBA)
-
10
構造体をコレクションに入れて扱いたいのですが…
コレクション
-
11
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
12
VBで引数にDictionaryオブジェクトを使用する方法
Visual Basic(VBA)
-
13
エクセルVBA ブックを閉じる前に確認メッセージを表示したい
Excel(エクセル)
-
14
EXCEL(VBA) 末尾の改行のみ削除したい
Excel(エクセル)
-
15
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
16
collection型を引数にしたファンクションでコンパイルエラー
Visual Basic(VBA)
-
17
マクロ Publicでの配列定義
Visual Basic(VBA)
-
18
VBAで配列の計算
Excel(エクセル)
-
19
チェックボックスの有無判定
JavaScript
-
20
Chr(13)とChr(10)の違いは?
PowerPoint(パワーポイント)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
コンボボックスのインデックス...
-
エクセルでXY座標に並べられた...
-
配列の中の最大値とそのインデ...
-
Excel2010のinputboxで複数デー...
-
C言語 ポインタと配列
-
VB6のメモリ解放に関して
-
Excelマクロ:配列データからグ...
-
.NET 文字コードの変換
-
Segmentation Fault (メモリ制限?)
-
エクセルVBAで実行時エラー7、...
-
複数のtextboxの処理を一括で行...
-
ReDim PreserveよりもReDimが遅い
-
Redim とEraseの違いは?
-
配列の初期化に時間がかかりま...
-
CheckBoxの配列化
-
COBOLの基本的な事なので...
-
C#でbyte配列から画像を表示さ...
-
EXCEL VBA 配列デー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
Excel2010のinputboxで複数デー...
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
配列のペースト出力結果の書式...
-
Dir関数で読み取り順を操作でき...
-
エクセルでXY座標に並べられた...
-
VBAで配列引数を値渡しできない...
-
C++で作成したDLLにVBAから配列...
-
構造体配列の特定のメンバーをF...
-
OutOfMemoryExceptionの回避策...
-
大量の変数を定義するにはどう...
-
VBAでMODE関数をつくる
-
VBScriptでCSVファイルを読み出...
-
定数配列の書き方
-
Segmentation Fault (メモリ制限?)
-
Excelのメモリ(配列)の上限は2G...
-
Redim とEraseの違いは?
-
CheckBoxの配列化
-
配列の中の最大値とそのインデ...
おすすめ情報
納得しました。
ありがとうございます。