こんにちは、Ryoです。
引数には値渡しのByValキーワードと参照渡しのByRefキーワードの二つがありますが、参照渡しで渡して引数の値を変更すると呼び出し元にも影響を及ぼすことができるので、この仕組みを利用して複数の値を返すプロシージャの例を書いていきます。
1.サンプル概要
サンプルとして準備した以下の表から税抜きと税込みの合計金額を複数の値を返す関数を作成して求め、それぞれ対象のセルへ書き込みます。
実行結果は以下の通りです。
以上がサンプル概要になります。
2.サンプルコード
Sub Sample1() Dim S1 As Double Dim S2 As Double Dim i As Integer For i = 1 To 10 'セルA1,B1の値を変数S1,S2に代入する S1 = Cells(i + 1, 1).Value S2 = Cells(i + 1, 2).Value 'Sample2()へ値を渡す Sample2 S1, S2 'セルC1,D1に変数S1,S2の値を書込む Cells(i + 1, 3).Value = Format(S1, "#,##0") Cells(i + 1, 4).Value = Format(S2, "#,##0") Next i End Sub
Sub Sample2(ByRef Smp1 As Double, ByRef Smp2 As Double) '単価 × 数量で税抜き合計金額を求める Smp1 = Smp1 * Smp2 '合計金額にを1.1倍して税込み金額を求める Smp2 = Smp1 * 1.1 End Sub
ここでは参照渡しの仕組みを利用して複数の値を処理する関数を作成しています。計算で求めるものは「税抜き金額」と「税込み金額」なので、変数S1(単価)、変数S2(数量)を参照渡しでSample2へ渡します。
Sample2 S1, S2
ここで渡された側の引数Smp1,Smp2の値が変更されると、呼び出し元の変数S1,S2の内容も変更されるので、結果として複数の値を返すことができるものです。
≪ByRefキーワードの構文≫
Sub/Function name(ByRef arglist [As type])
[statements]
End Sub
参照渡しは「値の参照先」を渡すもので、参照先=メモリ上の格納場所を情報として渡しますから値そのものを変更することで、呼び出し元の変数値にも影響を与えるということです。
3.まとめ
ByRefキーワードの参照渡しを利用することで複数の値を返すことができる関数を作成できますので、状況に応じて使い分けると便利なものです。
類似キーワードのByValは値のコピーを渡すので呼び出し元には影響せず、今回のByRefは値の参照先を渡すので呼び出し元にも影響があることを覚えておけば扱い自体難しいこともないので活用しやすいと思います。
以上、参照渡しを利用して複数の値を返す関数を作成する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo