VB.NET, C#, PowerShellを使用しているエンジニアのためのサイト。
基本的な使用方法から開発で役立つTipsまで幅広く取り扱っています。
Update 2018/12/05
< Prev Tips
Next Tips>
SubプロシージャやFunctionプロシージャはパラメタータを渡すことができ、このパラメータのことを引数と呼びます。
引数を使うことで、呼び出し元から値を受け取ることができるようになりますので、場面に応じた動作をするプロシージャを作成することができます。
引数を受け取る Subプロシージャの書式を以下に示します。
カンマで区切ることで複数の引数を取ることができます。
Sub プロシージャ名(変数名 As データ型 [, 変数名 As データ型 ]) '処理 End Sub
以下は、showSquareというSubプロシージャの作成例です。
showSquareは、縦と横の2つ引数を受け取って四角形の面積を計算して表示します。
Option Explicit
Sub showSquare(tate As Integer, yoko As Integer)
Dim area As Integer
'四角形の面積を計算
area = tate * yoko
'面積を表示
MsgBox area
End Sub
引数のあるプロシージャは以下の書式で呼び出します。
Subプロシージャ名 値1 [,値2, ... ,値n]
例えば、CallSubというプロシージャから、先ほど作成したshowSquare呼び出すには以下のようにします。
Option Explicit
Sub CallSub()
'3×4を計算して表示する
showSquare 3, 4
End Sub
引数に値を渡す方法は、値渡しと参照渡しの2種類があります。
値渡しは、呼び出し元で渡した値をプロシージャ内で変更しても、呼び出し元の値は変更されないというものです。
値渡しにしたい場合は、プロシージャの引数にByValキーワードを付けます。
以下に書式を示します。
Sub プロシージャ名(ByVal 変数名 As データ型 [, ByVal 変数名 As データ型 ]) '処理 End Sub
以下に値渡しの例を示します。
Subプロシージャ sample1 は 引数xを値渡しで受け取ることができます。
sample1 の引数xは、どんな値を受け取ったとしても5で上書きをします。
しかし、このsample1 に値を渡して書き換えられたとしても、呼び出し元の値は変わることはありません。
Option Explicit
Sub sample1(ByVal x As Integer)
'引数でどんな値を受け取っても5で上書きする
x = 5
End Sub
Sub callProc()
Dim x As Integer
x = 3
'sample1 に 3という値が入ったxを渡す
sample1 x
'3が表示される
MsgBox x
End Sub
続いて参照渡しですが、呼び出し元で渡した値をプロシージャ内で変更すると、呼び出し元の値も変更されるというものです。
参照渡しにしたい場合は、プロシージャの引数にByRefキーワードを付けます。
以下に書式を示します。ちなみにByBalもByRefも付けない場合はByRef(参照渡し)として扱われます。
Sub プロシージャ名(ByRef 変数名 As データ型 [, ByRef 変数名 As データ型 ]) '処理 End Sub
以下に参照私の例を示します。
Subプロシージャ sample2 は 引数xを参照渡しで受け取ることができます。
sample2 の引数xは、どんな値を受け取ったとしても5で上書きをします。
このsample2 に値を渡して書き換えると、呼び出し元の値も5に書き換えられます。
Option Explicit
Sub sample2(ByRef x As Integer)
'引数でどんな値を受け取っても5で上書きする
x = 5
End Sub
Sub callProc()
Dim x As Integer
x = 3
'sample2 に 3という値が入った値を渡す
sample2 x
'5が表示される
MsgBox x
End Sub