電子書籍の厳選無料作品が豊富!

Sub macro1()
Dim a As Integer, b As Integer
a = 1
b = 5
macro2 a, b
MsgBox a + b
End Sub
Sub macro2(c As Integer, d As Integer)
c = c * 10
d = d * 5
End Sub
答えは35と出ます。
よろしくお願いします。

A 回答 (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・・・と書くのは同じことなのでしょうか?

()の中は、引数(アーギュメント)といいます。引数を取るものと、引数を取らないものでは、引数を取らないものは、自己完結しますが、引数を取るものは、他のプログラム等から呼び出しが必要になります。

まず、ローカルウィンドウや、ウォッチウィンドウの使い方を覚えてください。そこで変数がどう変化するか見てください。
    • good
    • 0
この回答へのお礼

ご指導ありがとうございます。
単に回答だけでなく、なにを勉強すればいいのかも
教えていただけてよかったです。
おしえてもらった事はすべて初耳のことばかりでしたので、
びっくりしました。本当にありがとうございました。

お礼日時:2009/01/30 00:46

#2です。



質問文およびokormazdさんのレスをよく見てませんでした。
失礼しました。
私のレスはスルーしてください。
    • good
    • 0

参考になると思います。



Sub testb(ByVal a As String, b As String)
MsgBox a & b
End Sub

Sub testa()
Dim c As String
Dim d As String
c = "本日は"
d = "晴天なり"
Call testb(c, d)
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
()内にいれるのは、出だしでもいいんですね。
なぜか文字だと少し理解できた気がしました。

お礼日時:2009/01/30 00:40

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になったりしないのでしょうか?

どうか教えて下さい。

補足日時:2009/01/29 07:54
    • good
    • 0
この回答へのお礼

ご指導ありがとうございました。

お礼日時:2009/01/30 00:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!