
お世話になります。
byvalとbyrefについてお伺いいたします。
以下テキストからの引用(加工)ですが、
上はメッセージボックスに200 下は100が表示されますが、
下はCall sample8(A)とsample8をわざわざ渡す必要はあるのでしょうか?
結果が変わらないなら、渡す必要がないのでは?と思います。
よって、どういう時にbyvalを使うのかイメージがつきません。
意味あるのでしょうか?
____________________
Sub test()
Dim A As Long
A = 100
Call sample7(A)
MsgBox A
End Sub
Sub sample7(ByRef b As Long)
B = B * 2
End Sub
_____________________
_____________________
Sub test2()
Dim A As Long
A = 100
Call sample8(A)
MsgBox A
End Sub
Sub sample8(ByVal B As Long)
B = B * 2
End Sub
_____________________
No.1ベストアンサー
- 回答日時:
結果を変えてほしくない場合に、byvalを使用します。
下記のsub1はAの値を2倍した結果をBに設定します。
sub1の中でAの値を変えていますが、呼び出し元のxの値変わりません。
100
200
とメッセージボックスに表示されます。
Sub test3()
Dim x As Long
Dim y As Long
x = 100
Call sub1(x, y)
MsgBox (x)
MsgBox (y)
End Sub
Sub sub1(ByVal A As Long, ByRef B As Long)
A = A * 2
B = A
End Sub
No.2
- 回答日時:
test と test2 って、ただの比較用サンプルマクロででは?
ByRefだと、飛んだ先のプロシージャで変更された値が戻ってきますよ。
ByValだと、飛んだ先のプロシージャで変更されてももとのプロシージャでは値は代わりませんよ。
と、挙動を確認するだけのもの。
(Msgbox は、結果を表示して違いを確認しやすくするために入れてあるだけ。)
Sub test2()
Dim A As Long
A = InputBox("数字を入力してください")
Call sample8(A)
Call sample9(A)
Call sample10(A)
End Sub
Sub sample8(ByVal B As Long)
【入力値 Aについての処理1】
End Sub
Sub sample9(ByVal B As Long)
【入力値 Aについての処理2】
End Sub
Sub sample10(ByRef B As Long)
【入力値 Aについての処理3】
End Sub
とか、同じ値で複数のプロシージャの並行処理させたいときなどにときに有効。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
教えて!gooグレードポイントがdポイントに変わります!
dアカウント連携を行っていただくと、グレードに応じて「dポイント」が進呈されるようになります。
-
VBAを書くのにおすすめのテキストツール
Visual Basic(VBA)
-
エクセルはマクロを使用するのでパソコンに良くないので使用しないでと言われた。「なぜ?」
Excel(エクセル)
-
ExcelてVBAでマクロを実行したのですが 写真のように表示された数字と数式?が違うのですかどーし
Excel(エクセル)
-
4
excel2021で実行できないマクロ。どこを直したらいいのか
Visual Basic(VBA)
-
5
excel マクロで数字を入れると、その前後に文字が入るようにする
Excel(エクセル)
-
6
Dir関数の使い方
Visual Basic(VBA)
-
7
VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。
Excel(エクセル)
-
8
数式の置換がうまく行かない
Excel(エクセル)
-
9
エクセル マクロでマクロ名が変わってしまってエラーになります
Excel(エクセル)
-
10
EXCELで、漢字のみ抽出する式を教えてください。
Excel(エクセル)
-
11
VBA 表示を参照図のように編集するには
Excel(エクセル)
-
12
マクロで行を追加、削除すると行位置がずれますが、解決方法はありませんか?。
Excel(エクセル)
-
13
このようなデータが、sheet1〜sheet3まであるとします。 (合計2000行くらい) それを1
Excel(エクセル)
-
14
エクセルって複雑な処理は避けた方が良くないですか?
Excel(エクセル)
-
15
Excel VBA 少し複雑な構造データの取り込み
Visual Basic(VBA)
-
16
ExcelでA1からD10まで数字か入っています。 A列の行は固定で、B、C、Dの行を昇降順に変更す
Excel(エクセル)
-
17
エクセル
Excel(エクセル)
-
18
エクセルの縦に並んでいるデータを関数を使って横に結果をだせないでしょうか?
Excel(エクセル)
-
19
Excel VBA テキストインポートについてです
Visual Basic(VBA)
-
20
ローマ字、ハイフン付きの並び替え ローマ字抽出方法 Excelマクロ
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
イラレでダブルクリックで文字...
-
5
PDF→CSVへ変換
-
6
Illustratorテキストエリアへ塗...
-
7
サクラエディタで二つのテキス...
-
8
パワーポイントでテキストボッ...
-
9
バイナリファイルの編集
-
10
AFTER EFFECTS アンカーポイン...
-
11
フォトショップで複数テキスト...
-
12
リッチテキストと標準テキスト...
-
13
iMovieでテキストと画像を同時...
-
14
バイナリデータとテキストデー...
-
15
Illustrator CS5 営業の「営」...
-
16
photoshopのテキスト再編集
-
17
【aviutl】 画像にテキストを張...
-
18
エディタのkateで下線・太字・...
-
19
VBA:水平スクロールバーが要ら...
-
20
イラストレータをパワーポイン...
おすすめ情報
公式facebook
公式twitter