
以下のコードをご覧ください
変数について
aに1が入ります
その後、function sansyouに変数 a=1 が渡され bに1が入ります
ここの流れがわかりません。変数aに1が入っているのに、なぜ、b という違う
変数に 1を渡せるのでしょうか? 同じ 文字列の変数a なら渡せる意味が
分かります
ご存じの方、教えて下さい
(コード)
Sub 参照渡し()
Dim a As Long
a = 1
Call sansyou(a)
MsgBox a
End Sub
Function sansyou(ByRef b As Long)
b = b * 2
End Function
No.3ベストアンサー
- 回答日時:
多くのプログラミング言語には、変数名等の有効な範囲というものがあります。
詳しくは「グローバル変数」「ローカル変数」「スコープ」といったキーワードで検索。
VBAの場合、sub 〜() から End Subまでや、Function 〜()からEnd Functionの中でDimで宣言した変数やByRefやByValで指定した引数用の変数等は、そのEnd〜までの中だけで有効です。
有効範囲外のものを使うことはできません。
今回のプログラムだと、変数aは Sub 参照渡し()からEnd Subの中で宣言されているので、有効範囲はその中だけです。
同様に引数bはFunction sansyou〜End Functionの中だけで有効です。
このため、sanyou関数の中から 「sub 参照渡しの中の変数a」を直接操作することはできません。
このことからも「同じ 文字列の変数a なら渡せる意味が分かります」というのが間違った考えだと言えます。
なお、VBAの場合、「Option Explicit」を指定しないときは、未使用の変数を使おうとするとDimで宣言されたと見做されます。
このため、一見エラーが無く動いたように見えて、全然違う動きをしてしまうことがあります。
Function sansyou(ByRef b As Long)
a = a * 2
End Function
で、Sub 参照渡し()のaを操作しているつもりでいても、
実際には
Function sansyou(ByRef b As Long)
Dim a As Variant
a = a * 2
End Function
と同じになっています。
No.2
- 回答日時:
最初に。
MsgBoxは関数です。
https://learn.microsoft.com/ja-jp/office/vba/lan …
これによれば、最初ほ引数名は「prompt」です。
「変数aに1が入っているのに、なぜ、b という違う変数に1を渡せるのでしょうか? 同じ 文字列の変数a なら渡せる意味が分かります」
という考えだと、
MsgBox a
は
「変数aに1が入っているのに、なぜ、prompt という違う変数に1を渡せるのでしょうか? 同じ 文字列の変数a なら渡せる意味が分かります」
ということになります。
関数の仮引数というのは、呼び出し側で別々で指定されるものを、関数内で同じ名前で処理するための仕組みです。
MsgBox a だったら 仮引数prompt に 実引数a を渡した状態で MsgBoxを実行する
MsgBox "こんにちは" だったら 仮引数prompt に 実引数"こんにちは" を渡した状態で MsgBoxを実行する
Call sansyou(a) でも同様に、仮引数bに 実引数として a を渡した状態で sansyou関数を実行する、ということです。
その上で、値渡しと参照渡しとで動作が違います。
○値渡し:
Function sansyou(ByVal b As Long) としたき
・仮引数b は「 Longの値」を覚える変数になります。
・Call sansyou(a) で渡されるのは「aの値、つまり『1』」が渡されます。
仮引数b は 「値1」を受け取り記憶します。
・b = b * 2 で 「変数bの値である1」を2倍して「変数b」に記憶します。
・関数内の変数であるbと、関数外の変数aとの関係は無いので、実行後も変数aは1のままです。
○参照渡し:
Function sansyou(ByRef b As Long) としたき
・仮引数b は 「Long型変数への参照」を覚える変数になります。
このとき、bの値を読むときは「参照している変数の値」を読み出し、書き込むときは「参照している変数」へ書き込もうとします。
・Call sansyou(a) で渡されるのは「変数aそのもの(への参照)」が渡されます。
仮引数b は 「変数aそのもの(への参照)」」を受け取り記憶します。
・b = b * 2 で 「『変数bが参照している変数aの値』である1」を2倍して「変数bが参照している変数a」に記憶します。
これにより、実行後は変数aは2に変化します。
解説ありがとうございます。少しずつ理解できました
○値渡しについてなのですが
・関数内の変数であるbと、関数外の変数aとの関係は無いので、実行後も変数aは1のままです
ここでいう、関数内と関数外とは具体的に、何と何のことを
いっているのですようか?ご教授いただければと思います
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Excel(エクセル) 【マクロ】VLOOKUPにて参照元にデータが無い場合【該当なし】と表示したい 3 2024/06/08 16:45
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Excel(エクセル) 【マクロ】Fon nextステートメントによる変数への数値格納、2回以上について 3 2024/08/10 20:00
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) WORD VBA プログラム修正をお願いします。 2 2024/04/25 23:43
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
おすすめの美術館・博物館、教えてください!
美術館・博物館が大好きです。みなさんのおすすめをぜひお聞きしたいです。
-
今の日本に期待することはなんですか?
目まぐるしく、日本も世界も状況が変わる中、あなたが今の日本に期待することはなんですか?
-
洋服何着持ってますか?
洋服を減らそうと思っているのですが、何着くらいが相場なのかわかりません。
-
今から楽しみな予定はありますか?
いよいよ2025年が始まりました。皆さんには、今から楽しみにしている予定はありますか?
-
エクセル 入力があった場合のみ隣の関数を表示
Excel(エクセル)
-
(マクロ)値を返す時は subでもfunctionでもどちらでも良いのでしょうか?
Excel(エクセル)
-
数字入力後他の文字等が表示される方法について
Excel(エクセル)
-
-
4
Excelの時刻の不思議
Excel(エクセル)
-
5
考えた式の戻り値が期待通りにならない
Excel(エクセル)
-
6
Excelの計算が合いません。 諸事情で会計の簡素な購入・販売諸元表を作っているのですが、一つの項目
Excel(エクセル)
-
7
excelVBAについて。
Excel(エクセル)
-
8
大容量があつかえるソフトを探しています
Excel(エクセル)
-
9
Excelでの勤怠表の関数を教えてください
Excel(エクセル)
-
10
エクセルでCtrl+Tでテーブルの作成ができますが、これがピボットテーブルですか?
Excel(エクセル)
-
11
2列に入っているデータを1列で表示する関数について
Excel(エクセル)
-
12
【ExcelVBA】UTF-8(BOM無)でCSV保存するには?
Excel(エクセル)
-
13
Excelの数値の小数点表示について質問です
Excel(エクセル)
-
14
【マクロ】Ifとwith ステートメントにて分からない部分があります
Excel(エクセル)
-
15
【マクロ】functionプロシージャの、変数について
Excel(エクセル)
-
16
エクセル IF計算式?でしょうか?
Excel(エクセル)
-
17
ExcelでASCを使って全角を半角にするとカタカナも半角になってしまいます。
Excel(エクセル)
-
18
if関数。半角文字や全角文字で分ける事ができますか?
Excel(エクセル)
-
19
Excelの区切り文字について質問です。 Excel機能にある、区切り文字を使う時に区切ったあとの書
Excel(エクセル)
-
20
特定の文字列を含む、住所を抽出する
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】1回目の実行後、2...
-
エクセル内に読み込んが画像の...
-
Excelのメニューについて
-
Excelで作成した出欠表から日付...
-
Excel 偶数月の15日(土日祝...
-
Excelの数式について教えてくだ...
-
勤務外時間を出す表が作りたい
-
VLOOKUP FALSEのこと
-
エクセルの数式について教えて...
-
【マクロ】参照渡しについて。...
-
Excel 日付の表示が直せません...
-
Excelの条件付書式について教え...
-
マクロを実行すると、セル範囲...
-
【マクロ】参照渡しとモジュー...
-
【マクロ】シート追加時に同じ...
-
Excelファイルを開くと私だけVA...
-
Excelのデーターバーについて
-
エクセルの設定、特定の列以降...
-
別のシートの指定列の最終行を...
-
エクセル 同じ行の隣り合う数字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】重複する同じ行を、...
-
Excelの条件付き書式のコピーと...
-
vba 印刷設定でのカラー印刷と...
-
VBA の単語の意味を教えて下さい。
-
Excel 日付の表示が直せません...
-
エクセル 同じ行の隣り合う数字...
-
エクセル条件付き書式について。
-
エクセルの数式につきまして
-
ファイル名の変更
-
エクセル 数字のみ抽出につて
-
Excelの開始ブックを固定したい...
-
エクセルの数式について教えて...
-
エクセルのセルをクリックする...
-
=INDIRECT(RIGHT(CELL("filenam...
-
エクスプローラーで見ることは...
-
Excelの関数で質問です
-
至急お願いいたします 屋上の備...
-
エクセルでセルに入力する前は...
-
関数を教えて下さい
-
Excel 関数での質問です
おすすめ情報