
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も見ています
-
配列の参照渡しで型が一致しません。
Visual Basic(VBA)
-
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
VBで構造体の配列を関数に渡す方法?
Visual Basic(VBA)
-
-
4
<input type=hidden" >で配列(複数の要素)を渡したいとき?"
PHP
-
5
VBAで文字を反映させると255文字の制限になってしまいます。
Visual Basic(VBA)
-
6
「Columns(A:C")」の列文字を数字にして表記したい"
Excel(エクセル)
-
7
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
8
VB.net 引数で配列変数を渡す際の要素数
Visual Basic(VBA)
-
9
Changeイベントでの複数セルのクリアの処理について
Visual Basic(VBA)
-
10
条件が合致する列を削除したい(VBA)
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
構造体配列の特定のメンバーをF...
-
Dir関数で読み取り順を操作でき...
-
エクセルでXY座標に並べられた...
-
レコードセットの中身を配列に...
-
配列のペースト出力結果の書式...
-
POSTリクエストの投げ方
-
VBAで配列引数を値渡しできない...
-
定数配列の書き方
-
VBAのワークシート関数で配列の...
-
配列からのCSVファイルの作...
-
大量の変数を定義するにはどう...
-
CheckBoxの配列化
-
COBOLの基本的な事なので...
-
EXCELを使って、アクセスログを...
-
デバイスマネージャーの一覧取得
-
複数のtextboxの処理を一括で行...
-
エクセル(VBA)の空白配列の削除...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
配列の中の最大値とそのインデ...
-
エクセルでXY座標に並べられた...
-
Dir関数で読み取り順を操作でき...
-
配列のペースト出力結果の書式...
-
COBOLの基本的な事なので...
-
複数のtextboxの処理を一括で行...
-
構造体配列の特定のメンバーをF...
-
大量の変数を定義するにはどう...
-
CheckBoxの配列化
-
Excelのメモリ(配列)の上限は2G...
-
VB6のメモリ解放に関して
-
ReDim PreserveよりもReDimが遅い
-
Excel2010のinputboxで複数デー...
-
定数配列の書き方
-
コンボボックスのインデックス...
-
EXCELを使って、アクセスログを...
-
レコードセットの中身を配列に...
おすすめ情報
納得しました。
ありがとうございます。