トップ > スキル : アプリケーション > VBA for Access > 応用編(組み込み関数)

VBA_Access

ユーザ定義関数

ユーザが独自に定義した関数をユーザ定義関数と呼びます。さまざまな関数を複数組み合わせて作った式をユーザ定義関数として作成しておくことで、後から繰り返し利用することができ、演算の修正時も関数の中身を変えるだけで、関数と使っているところすべてに反映されます。使い方は、組み込み関数と同じように利用することができます。

作成手順

ユーザ定義関数の大まかな作成手順は以下の通りになります。

  1. VBEウィンドウを起動させ、必要に応じて標準モジュールを作成
  2. [Public Function]プロシージャを作成
  3. 処理を記述
  4. 作成したユーザ定義関数を設定

ユーザ定義関数はFunctionプロシージャとして作成するところがポイントとなります。また、Publicプロシージャにすることで、データベースのどこからでも指定できます。

Functionプロシージャの書式

Function 関数名 (引数名 As データ型[,引数名 As データ型…]) As 戻り値のデータ型

  処理を記述

  関数名 = 戻り値

End Function

【注意点】
  • ユーザ定義関数の関数名は、イベントプロシージャやクエリなどで呼び出す名前になる。
  • 引数は関数で使う引数で、引数がなくてもかまわないが、必要に応じて複数設定しても良い。
  • 戻り値のデータ型は、関数で返す値のデータ型になる。指定しない場合はVariant型になる。
  • 「関数名=戻り値」の記述によって、処理された結果を戻り値にすることができる。
記述例)
  Function Sum(値 As Integer) As Long
  	'処理
  	Sum= 戻り値
  End Function
    

ユーザ定義関数の作成

簡単なユーザ定義関数を作ってみます。
このユーザ定義関数は、月によって日数を返すもので、1月なら31、2月なら28というように、月の日数を表示するように作成します。2月は28もあれば、29もありますが、ここでは28だけを表示するようにします。

※ これは本年の日数を表示するのではなく、一般的な月の日数を調べる場合に利用するものとします。

フォームの作成

図のようなフォームを作成します。フォーム名は「月の日数表示」とします。

月を入力するテキストボックスと日数が表示されるテキストボックスを作成します。「月の日数は」、「日です。」というラベルを作成して、図のようにテキストボックスの右側に配置します。
月を入力するテキストボックスの名前は「月」、日数が表示されるテキストボックスの名前は「日数」として設定します。

ユーザ定義関数の記述

VBE画面を表示し、Functionプロシージャを作成します。

[挿入]メニューから[プロシージャ]をクリックして、[プロシージャの追加]ダイアログボックスを表示させます。

プロシージャ名に「日数検索」と入力して、種類は「Functionプロシージャ」を選択して[OK]ボタンをクリックします。

プロシージャのひな型が作成されたら、以下のように記述します。

  Public Function 日数検索(Tuki As Integer) As Integer
  	Select Case Tuki
  		Case 1, 3, 5, 7, 8, 10, 12
  			日数検索 = 31
  		Case 4, 6, 9, 11
  			日数検索 = 30
  		Case 2
  			日数検索 = 28
  		Case Else
  			MsgBox "月が適切ではありません"
  	End Select
  End Function
    

作成した関数をコントロールに設定

作成したユーザ定義関数をフォームのテキストボックスに設定します。

フォームをデザインビューに切り替えて、「日数」テキストボックスのプロパティシートを表示します。
[データ]タブの[コントロールソース]プロパティに「=日数検索([月])」と入力します。

引数の「月」は、フォームの月を入力するテキストボックスの名前です。よって、入力された月を引数にすることで、プロシージャ内で条件判断されて該当する日数が戻り値となって表示されることになります。

動作の確認

フォームをフォームビューに切り替えます。
適当な月数を入力して動作を確認します。


組み込み関数は、VBA記述において良く利用される処理の一つになります。ユーザの入力した情報を検査して、その情報が適正なものかをチェックしたり、情報を適切に扱える情報に変化させるなどの役目を行います。関数そのものをすべて覚えておく必要はありませんが、どのような場面で活用できるかの認識は持っておくと良いでしょう。