#131 複数の返り値を持つプロシージャ VBA

一般に、プロシージャから何らかの返り値が必要な場合には「Functionプロシージャ」を使います。
例:Function GetAge(dtmBirth As Date) As Integer
        ※この例では Integer型 の値が返されます

しかし、Functionプロシージャとしての返り値は1つしかし持つことができません。そこで、プロシージャとしての返り値だけでなく、引数を返り値として扱うことによって"複数の返り値を持つプロシージャ"を作ってみます。


引数には2つのタイプがあります。『参照渡し』と『値渡し』です。
  • 『参照渡し』では、呼び出されたプロシージャ内で変数の値が変更されると、引数として使われた呼び出し元の変数の値も変更されます。

  • 『値渡し』では、呼び出されたプロシージャ内で変数の値が変更されても、引数として使われた呼び出し元の変数の値は変更されません。

VBAでは、特に指定しない限り、引数は『参照渡し』としてプロシージャに渡されます。したがって、プロシージャでの計算結果などをこの引数に代入することによって、呼び出し元ではそれを返り値として扱うことができます。

次の"ByrefTest"プロシージャでは、1番目と2番目の引数の値を合計し、その計算結果を3番目の引数にセットして返します。また、通常のFunctionプロシージャの返り値としても、その値が100以上かどうかをBoolean型(TrueかFalseか)で返します。

サンプルプロシージャ:
Function ByrefTest(intA As Integer, intB As Integer, _
                                intSum As Integer) As Boolean

  '引数intAとintBの合計をintSumに代入して返します
  intSum = intA + intB

  'プロシージャの返り値として、
  '合計が100以上だったらTrue、未満ならFalseを返します
  ByrefTest = (intSum >= 100)

End Function

呼び出し側の使用例:
Dim intRet As Integer

If ByrefTest(50, 70, intRet) Then
  MsgBox CStr(intRet) & " は100以上です!"
Else
  MsgBox CStr(intRet) & " は100以以下です!"
End If

If ByrefTest(10, 80, intRet) Then
  MsgBox CStr(intRet) & " は100以上です!"
Else
  MsgBox CStr(intRet) & " は100以以下です!"
End If
実行画面実行画面
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved