![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.4ベストアンサー
- 回答日時:
こんにちは。
そのサンプルは、どこかの本に載っていたものではありませんか?
そういうことは、段階的にVBAとしては、応用コースに出てくるものです。ある程度、自分でマクロを書くようになれば、自然に覚えます。
書籍では、「値渡しと参照渡し」というタイトルなどが付いています。
ただ、サンプルコードとしては、以下のように書き換えたほうが分かりやすいです。
'「参照渡し」ByRef
Sub macro2(a As Integer, b As Integer)
a = a * 10
b = b * 5
End Sub
このサブプロシージャは、「参照渡し」になっていますから、値は、サブプロシージャの中で計算されて、元のMacro1 側に戻されます。
それに対比するのが、「値渡し」という方法です。
'「値渡し」ByVal
Sub macro3(ByVal a As Integer, ByVal b As Integer)
a = a * 10
b = b * 5
End Sub
こちらの比較してみてください。引数の前に何もつけないと、自動的に、サブプロシージャでは、「参照渡し」になります。
>Sub macro2(c As Integer, d As Integer)
>のようにサブプロシージャの後の()の中に入れるのと
>改行してDim・・・と書くのは同じことなのでしょうか?
()の中は、引数(アーギュメント)といいます。引数を取るものと、引数を取らないものでは、引数を取らないものは、自己完結しますが、引数を取るものは、他のプログラム等から呼び出しが必要になります。
まず、ローカルウィンドウや、ウォッチウィンドウの使い方を覚えてください。そこで変数がどう変化するか見てください。
ご指導ありがとうございます。
単に回答だけでなく、なにを勉強すればいいのかも
教えていただけてよかったです。
おしえてもらった事はすべて初耳のことばかりでしたので、
びっくりしました。本当にありがとうございました。
No.1
- 回答日時:
Sub macro1()
macro1という名前のサブプロシージャです。引数はありません。
Dim a As Integer, b As Integer
a,bは整数ですよ。どんな変数を使うか(コンピュータ) に知らせています。
a = 1
aは1です。
b = 5
bは5です。
macro2 a, b
macro2というサブプロシージャを実行してください。実行するのに必要なaとbをつけてお願いします。
MsgBox a + b
a+bを表示してください。
End Sub
これでmacro1は終わりです。
Sub macro2(c As Integer, d As Integer)
macro2という名前のサブプロシージャです。実行するには、整数の引数cとd 2つ必要です。
macro1で、a=1,b=5で実行するように頼まれています。これがcとdにはいります。だから、c=1,d=5になります。
c = c * 10
c×10を計算してその結果を新しいcにしてください。
c=1×10=10になります。これが頼まれたmacro1のaとしてもどります。
d = d * 5
d×5を計算してその結果を新しいdにしてください。
d=5×5=25になります。これが頼まれたmacro1のbとしてでもどります。
End Sub
これでmacro2は終わりです。macro2の実行を頼まれたmacro1に戻ります。aは10、bは25になっています。
macro1に戻ってa+bを表示するのですから、
10+15=35が表示されます。
この回答への補足
Sub macro2(c As Integer, d As Integer)
のようにサブプロシージャの後の()の中に入れるのと
改行してDim・・・と書くのは同じことなのでしょうか?
aがcに、はいり、bがdに、はいるところですが、
なぜaがdで、bがcになったりしないのでしょうか?
どうか教えて下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:07
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:13
- Visual Basic(VBA) 標準モジュール Public mOnTime As Date Sub sample() '実行プロシ 1 2023/02/22 15:44
- Visual Basic(VBA) vbaの計算 if elseと範囲について 6 2022/11/26 01:49
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/01/11 08:33
- Visual Basic(VBA) エクセル マクロ(A1:A10)までの中で一番多く出た数字をB10に表示 6 2023/04/25 17:01
- Excel(エクセル) VBA カゥントで数値の範囲を規制 1 2022/05/20 06:20
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) VBA 配列を使ったコードに直していただけますか 4 2023/05/06 15:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access VBAで行ラベルが定義さ...
-
エクセルVBAでUserFormを起動し...
-
Accessのマクロでモジュールを...
-
callで順に実行されるプロシー...
-
VBA プロシージャの名前の取得
-
ACCESS2007インポート時の空白...
-
OutlookVBAで作成したマクロに...
-
或るプロシージャの呼び出し元判定
-
【Excel VBA】 WorksheetやRa...
-
ACCESSでストアド
-
Excel VBAで「プログラム実行」...
-
Excel:ThisWorkbookオブジェク...
-
vbaでブックを開いたときにコン...
-
DBMS_OUTPUT.PUT_LINEを実行し...
-
Accessでグローバル変数を宣言...
-
PL/SQLカーソルの2重FORループ...
-
Statement ignored というエラー
-
会社の〇〇部と〇〇課の違いっ...
-
ストアドプロシジャからストア...
-
PL/SQL exceptionを呼び出すには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access VBAで行ラベルが定義さ...
-
Accessのマクロでモジュールを...
-
エクセルVBAでUserFormを起動し...
-
VBA プロシージャの名前の取得
-
Accessでグローバル変数を宣言...
-
callで順に実行されるプロシー...
-
【Excel VBA】 WorksheetやRa...
-
或るプロシージャの呼び出し元判定
-
OutlookVBAで作成したマクロに...
-
ACCESS2007インポート時の空白...
-
excel/vba/public変数
-
PL/SQLのエラーについて
-
ACCESS マクロをモジュールに変...
-
Excel VBAで「プログラム実行」...
-
Access2016 VBA ボタンのイベン...
-
DBMS_OUTPUT.PUT_LINEを実行し...
-
ブックオープン時にテキストボ...
-
ExcelVBAでしりとりのやり方を...
-
エクセルVBAが対応できるプログ...
-
Accessのプロシージャ名が勝手...
おすすめ情報