
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
動的配列VBAについて
-
VB6からの移行したいけど、VB.N...
-
MATLABを使ったSTLデータのボク...
-
VBAでMODE関数をつくる
-
エクセルでXY座標に並べられた...
-
デバイスマネージャーの一覧取得
-
VBで配列に格納されているデー...
-
複数のtextboxの処理を一括で行...
-
エクセル関数を教えてください4
-
COBOLの基本的な事なので...
-
大量の変数を定義するにはどう...
-
C#でbyte配列から画像を表示さ...
-
現在コピーされているものによ...
-
VB2008EE でS-JISでエンコード...
-
EXCEL VBAの課題です
-
コンボボックスのインデックス...
-
構造体?二次元配列?
-
2次元配列を部分的に削除する方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
Dir関数で読み取り順を操作でき...
-
エクセルでXY座標に並べられた...
-
vba フィルター 複数条件 3つ以...
-
OutOfMemoryExceptionの回避策...
-
配列のペースト出力結果の書式...
-
VB.NETの配列にExcelから読み込...
-
レコードセットの中身を配列に...
-
配列の中の最大値とそのインデ...
-
大量の変数を定義するにはどう...
-
VBAでMODE関数をつくる
-
構造体配列内の文字列検索のよ...
-
構造体配列の特定のメンバーをF...
-
COBOLの基本的な事なので...
-
DBから取得した値を配列へ代入する
-
VBScriptでCSVファイルを読み出...
-
VB6からの移行したいけど、VB.N...
-
RPG 配列宣言について
-
コンボボックスのインデックス...
おすすめ情報
納得しました。
ありがとうございます。