こんばんは
プログラムのなかで test2 (counter)かっこをつけて渡すと ByRef ByValの指定に関係なく
実行結果1が表示されます。かっこをつけないと下記のとおり(予想どおり)表示されます。
ByRef は参照渡しなので、Private Sub test2(ByRef counter) counter = counter + 1
の結果が返されるのではないのかとおもうんですが、test2 (counter)とすると実行結果が1
となります。
上記の違いについて教えてください。
①参照渡し ByRef 実行結果 2
Private Sub test1()
Dim counter As Integer
counter = 1
test2 counter
MsgBox counter
End Sub
Private Sub test2(ByRef counter)
counter = counter + 1
End Sub
②値渡し ByVal 実行結果 1
Private Sub test3()
Dim counter As Integer
counter = 1
test4 counter
MsgBox counter
End Sub
Private Sub test4(ByVal counter)
counter = counter + 1
End Sub
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
> test2 (counter)とすると実行結果が1となります。
Subプロシージャで引数を渡すときは
test2 counter
Call test2(counter)
の何れかを記述します。
ご質問の様に
test2 (counter) 左括弧の前にスペースが入る
と書くと
変数counterの値を渡すのではなく、counterの値を評価した1という値を渡すという意味(※1)になります。これによりtest2の定義でByRefが書かれていたとしても強制的に値渡しになってしまいます。
※1
例えば引数として、call test2(counter+1)としたとすると、counterの値が1の場合は計算結果の2が値渡しでtest2に渡されますよね? これの"+1"なし版とお考え下さい。
このように思わぬバグ発生の可能性がありますので記述としては
Call test2(counter)
という書きかたをお勧めします。
ご回答ありがとうございます。
一点おしえてください。
>変数counterの値を渡すのではなく、counterの値を評価した1という値を渡すという意味(※1)になります。
【質問】
変数Counterの値とcounterの値を評価した1というのはちがういみなのでしょうか?
よろしくおねがいいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- 英語 提示分の"with"の使い方等について 1 2022/08/23 10:40
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) excel vba 参照渡しと値渡し 2 2022/04/27 10:45
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PL/SQLでのTO_DATEの時間取得に...
-
VB初心者。小数点以下の表示で...
-
Excel VBA 複数選択したリスト...
-
vbaの繰り返しで求める最大値に...
-
ポインタのプログラムについて
-
テキストボックスのvalueとtext...
-
VBAでWEB上の入力項目に値をい...
-
C# get set
-
ACCESS VBA 画像ファ...
-
値を返さないコード パス
-
Dbtypeって?
-
オブジェクト型の変数同士の値...
-
FlexGridで複数選択したセル、...
-
windowsアプリケーションで小数...
-
VB.NETでコンボボックスの1行目...
-
ハッシュテーブル(連想配列)が...
-
AccessVBA 帳票フォームの非連...
-
VBで電卓のメモリー機能はどの...
-
リストボックス内を検索(VB6.0)
-
範囲が指定されている乱数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
マクロ 特定のセル値のみクリ...
-
VB.NETでコンボボックスの1行目...
-
変数名の取得
-
値を返さないコード パス
-
Excel VBAのリストボックスの値...
-
VB初心者。小数点以下の表示で...
-
ハッシュテーブル(連想配列)が...
-
textboxとLabelを動的に変更する
-
PL/SQLでのTO_DATEの時間取得に...
-
VB.NETでアクティブなformを知...
-
Excel vba ユーザーフォームテ...
-
マクロで奇数と偶数の値を2か所...
-
DataTableに対するLINQについて
-
【C++/CLI.NET】コンボボックス...
-
[VBA]選択範囲の下から上に処理...
-
範囲が指定されている乱数について
-
[VB.net] DataGridViewのコンボ...
-
変数に代入してある数値を表示...
-
vbscriptを使いexcelを参照して...
おすすめ情報