ByRef 引数
VB関数(FunctionとSub)の引数の結果を、呼び出し元の引数の値に反映させるためには、次のようにByRef(参照渡し)を記述します。
関数には呼び出し元の変数がそのまま渡される(参照渡し)ので、関数内で引数の値を変更すると、それは、呼び出し元の変数の値を変更したことになります。
Public Function 関数名(ByRef 引数名 As データ型) As 戻値データ型 ................. .............. End Function
ByRef の注意点は、関数内で引数の値を変更すると、関数処理の後、変更した引数の値を保持しているので、それに気づかずに思わぬミスをすることです。
関数の引数は、できるだけ値渡しのByVal を使うようにしましょう。
ByRef サンプルプログラム
関数の引数にByRefを使って、商品の税込価格から消費税を計算し、消費税額を画面に表示するプログラムを作成します。
ソースリストの枠内をクリックすると全選択できます。
Module Module1 Sub Main() ' 変数の宣言 Dim inStr As String Dim zeikomiKakaku As Double ' キーボードから商品の税込み価格を入力 Console.WriteLine("税込み価格を入力して") Console.WriteLine("Enterキーを押してください") InStr = Console.ReadLine() ' 文字列を整数に変換 zeikomiKakaku = Integer.Parse(inStr) ' 消費税額を求めて画面に表示 Dim zeiGaku As Integer = 0 ' 引数zeiGakuをByRefで関数に渡す CalucZeigaku(zeikomiKakaku, zeiGaku) Console.WriteLine("消費税は" & zeiGaku & "円です") End Sub '*************************************************************** ' 機能:消費税額を計算する関数 ' 引数1:税込価格zeikomiKaKaku[ByVal] ' 引数2:消費税額zeiGaku[ByRef] '******1*********2*********3*********4*********5**********6***** Public Sub CalucZeigaku(ByVal zeikomiKaKaku As Integer, ByRef zeiGaku As Integer) Dim hontaiKakaku As Double = 0 ' 消費税額を求める hontaiKakaku = zeikomiKaKaku / 1.08 ' 本体価格は四捨五入 zeiGaku = zeikomiKaKaku - hontaiKakaku End Sub End Module
プログラムを実行すると、0だったzeiGakuは、関数の中で消費税が計算されて戻ってくるので、消費税が表示されます。
しかし、関数の引数にByRefを使うと、関数の中でどのように引数が変更されるか知らないと、バグの元になりかねません。
繰り返しになりますが、関数の引数は、できる限りByValを使うようにしてください。