プロが教える店舗&オフィスのセキュリティ対策術

Sub TestB(ByVal MyArray() As Integer)

のようにして、
配列引数をByValで渡そうとすると
エラーが出てしまいます。

http://vba.doorblog.jp/archives/51291826.html

このページにあるように
variantとして渡せば
エラーは出ないのですが
byrefとして扱われてしまいます。

なぜVBAでは配列を値渡しすることができないのでしょうか?
何が問題なのでしょうか?

質問者からの補足コメント

  • 納得しました。

    ありがとうございます。

    No.2の回答に寄せられた補足コメントです。 補足日時:2015/12/06 12:55

A 回答 (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 …
この回答への補足あり
    • good
    • 1

言語仕様



言語的に、メモリ領域を正確にコピーするのが面倒だったんじゃないですかね。
配列やオブジェクトのようなものはすべて参照渡しです。

そもそも引数で受け取った値を直接変更するというコードはタブーなので、どっちでもいいですし、無駄なメモリ領域の消費という意味ではすべて参照渡しにしてくれた方がいいです。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A