VBA初級(第三回)予習
VBA講義も今週で3回目
今週は、「プロシージャ・関数」という題目で講義を受けるんだが、中々理解に苦しむ項目あり。頭で理解しようとするが、考えがまとまらない。
以下質問用に少し考えをまとめる
参照渡しと値渡し
参照渡し・・・メモリの参照を渡す〈ByRef型〉
値渡し・・・値を渡してメモリは別に用意〈ByBal型〉
引数とパラメータの考え方
Sub Mysub3_03()
Dim x As Long: x = 10
Call IncrementNumber(x)
Debug.Print x
End Sub
Sub IncrementNumber(y As Long)
y = y + 1
End Sub
上記演習3の場合
引数・・・IncrementNumber(x)の(x)
パラメータ・・・IncrementNumber(y As Long)のy
引数の値がパラメータに渡されるので、x=y
名前が違う箱に同じ数を入れるようなものか?ややこしや。。
参照と値を渡すが少し混乱
Sub Mysub3_04()
Dim x As Long: x = 20
Dim y As Long: y = 4
Call IncrementNumber1(x, y)
Debug.Print x & "を" & y & "で割ったときの余りは" & x Mod y & "です。"
End Sub
Sub IncrementNumber1(ByVal i As Long, ByVal j As Long)
i = i + 1
j = j + 1
Debug.Print i & "を" & j & "で割ったときの余りは" & i Mod j & "です。"
End Sub
演習4を少し改良上記のプロシージャを実行すると、下記のようなデバック表示をする。
21を5で割ったときの余りは1です。
20を4で割ったときの余りは0です。
Byval(値渡し)を外すと
21を5で割ったときの余りは1です。
21を5で割ったときの余りは1です。
ということは、値渡しすると元の数値をいじらずに、計算ができるという考えでいいのだろうか。(ここでいうSub IncrementNumber1プロシージャでいくら計算しようが、Mysub3_04プロシージャに影響はないということか)
SubプロシージャとFunction(関数)プロシージャの違い
2つのプロシージャの違いがそもそも分からない。
『戻り値を持つ・持たない』で区別があるみたいだが、
Sub Mysub3_02()
Call Square(5)
End Sub
Sub Square(x As Long)
Debug.Print x ^ 2
End Sub
Sub Mysub3_06()
Debug.Print Square2(5)
End Sub
Function Square2(x As Long)
Square2 = x ^ 2
End Function
演習2(Subプロシージャ)と6(Functionプロシージャ)を比較
演習2は、パラメータ(5)をSub Squareへ渡して、計算された結果を表示する。
演習6は、パラメータ(5)をFunction Squareへ渡して、計算された結果を戻り値として表示する。
結果は同じ出力なんだけど、引数そのまま出力するか戻り値として出力するかの違いか。
この記事が気に入ったらサポートをしてみませんか?