関数の機能と記し方

 関数を実際にどこにどのように記すのかは次の節で示すこととし、ここでは、関数の基本的な機能と表記の仕方を紹介します。


引数と戻り値

 まずは一般的に関数がどのような形をしていてどのように働くのかをみてみます。
 実例としてSqr関数という関数をみてみます。これは数値の平方根を求める関数で、例えば9の平方根を求める場合は

Sqr(9)

と記します。すると、この関数が実行された結果として、

3

という値が得られます。
 このように、関数は「関数名(引数)」という形で使用されます。引数(上記の例では「9」)とは、集計や加工の対象を指定するものです。上記のSqr関数の場合、引数は1つだけですが、引数が2つ以上必要な関数や、引数が不要な関数もあります。
 また、関数の実行により得られる値(上記の例では「3」)を戻り値といいます。

引数の記し方

引数が数値の場合

 すでに上記のSqr関数の例で示していますが、数値を引数とする場合は()の中にそのまま数値を記せば問題ありません。
 別の例としてAbs関数を見てみます。これは数値の絶対値を返す関数で、例えば「-23」の絶対値を求める場合

Abs(-23)

と記します。戻り値は「23」となります。

引数が文字列の場合

 実例としてLen関数という関数をみてみます。これは文字列の長さ(文字数)を求める関数で、例えば「よこはまし」という文字列の長さを求める場合は

Len("よこはまし")

というように記します(戻り値は「5」となります)。このように、引数として文字列を指定する場合は「"」で囲みます。

引数が日付や時刻の場合

 次の例としてMonth関数をみてみます。これは引数として日付を指定すると、戻り値としてその「月」の値を返す関数です。例えば2015年10月21日という日付が何月なのかを求める場合は

Month(#2015/10/12#)

と記します(戻り値は10となります)。このように、引数として日付を指定する場合は「#」で囲みます。

 また、時刻のみを指定する場合もあります。Minute関数という関数は、時刻を指定すると「分」の値を返す関数です。例えば12時34分56秒という時刻から、何分なのかを求める場合は

Minute(#12:34:56#)

と記します(戻り値は「34」となります)。

 なお、日付と時刻を合わせて「#2015/10/12 12:34:56#」とすることも可能で、上記のMonth関数やMinute関数でもそのような引数を指定することができます。

引数が列名の場合

 ここまでは、引数として具体的な数値や文字列などを直接指定する例を見てきましたが、引数がテーブルやクエリに記録されている場合は、その列(フィールド)の名を引数として指定することで、多数のデータに対する戻り値を一括して得ることができます。
 例えば、テーブルに「ふりがな」という列があるとします。これに対し

Len([ふりがな])

と記すことで、テーブルに記録されているすべての行(レコード)についての戻り値を一括して得ることができます。
 列のデータ型にかかわらず角カッコ([])で囲むのがポイントです。

複数の引数を指定する場合

 関数によっては2つ以上の引数を必要とする場合があります。
 例としてLeft関数をみてみます。これは、文字列のうち左から何文字かを取り出す関数で、2つの引数(文字列と、取り出す文字数)を必要とします。例えば「北海道札幌市」という文字列のうち左から3文字を取り出したい場合

Left("北海道札幌市",3)

と記します(戻り値は「北海道」となります)。このように、複数の引数を指定する場合、それらをカンマ(,)で区切ります。
 なお、複数の引数を指定できる関数の場合、何番目の引数としてどういう値を指定しなければならないかの順番が決まっていて、間違えるとエラーになったり想定していない値が返されたりしますので注意が必要です。

関数のネスト(入れ子)

 ここまでは関数の引数として具体的な数値や文字列などを指定する例を見てきましたが、関数の引数として関数を指定するということも可能です。これを関数のネスト(入れ子)といいます。

 具体的な例としてDate関数とDay関数の2種類の関数を使った例をみてみます。
 Date関数はシステムの日付を返す関数で、引数の不要な関数です。
 例えば2016年10月29日において

Date()

と記すと、戻り値は「2016/10/29」となります。

 また、Day関数は、引数として日付を指定すると、その「日」の値を返します。
 例えば

Day(#2016/10/29#)

とすると、戻り値として「29」が返されます。

 さて、そこでですが、Day関数の引数として「#2016/10/29#」という日付を入力する代わりに、「Date()」と入力してみます。このとき、関数は次のようになります。

Day(Date())

 これが関数の入れ子の例です。2016年10月29日における「Date()」の戻り値は「2016/10/29」ですので、この関数の入れ子は上記の

Day(#2016/10/29#)

と同じく「29」という戻り値を返します。なお、引数として日付を指定するときは「#」で囲む必要がありますが、Date関数の戻り値はそのまま日付として扱われますので「#」で囲む必要はありません。
 このように、複数の関数を入れ子にして組み合わせて使うことにより、欲しい結果(戻り値)をより短い手順で得ることができます。