各オブジェクトでの関数の使用

 ここでは、テーブル、クエリ、フォーム、レポートの各オブジェクトにおいて、具体的に関数をどのように記して利用するのかを示します。

テーブルでの使用

集計列での使用

 古いバージョンのAccessではテーブルで関数は一切使えませんでしたが、最近のバージョンではテーブルでも関数を使用できるようになっています。ただし、データ型が「集計型」である列でしか用いることができないなど制約が多く、Excelのような使い勝手は得られません。

f:id:accs2014:20161111001757p:plain:right:w400

 さて、例として右のようなテーブルを用います。


f:id:accs2014:20161111001756p:plain:right:w400

 データシートビューで直接関数を記入することはできません。まずデザインビューの画面に移り、適当な列名を入力し、データ型として「集計」を選択します。


f:id:accs2014:20161111001755p:plain:right:w400

 式ビルダーというウインドウが現れますので、「Len([ふりがな])」と書き込んでみます。Len関数は文字列の長さを得るための関数であり、また、他の列の値を参照する場合は列をで囲って表します。こうすることで、「ふりがな」列のそれぞれの行ごとの文字列の長さが返ってきます。
 なお、使用する関数についてはウインドウ下部から選択することもできます。


f:id:accs2014:20161111001754p:plain:right:w400

 入力した内容はプロパティの「式」に記録されます。別の式に変更したい場合はここを直接変更します。


f:id:accs2014:20161111001753p:plain:right:w400

 データシートビューを開くと、適切な戻り値が得られていることがわかります。


 さて、そもそもテーブルは本来「生のデータ」を記録するためのものであり、関数を使って求められた値をわざわざテーブルに記録するというのは冗長なことと考えられるので、テーブルにおける関数の必要性に関して言えばちょっと微妙です(正規化の考え方から見ればズバリ不要ということになります。古いバージョンのAccessでこうした機能がなかったのはこのためです)。
 また、使える関数がかなり限られていて、一見使えて当たり前のようにも思われるNz関数などが使えないのは不便なところです。関数で値を求めるためだけにクエリを作らなくても済む、というような場合は確かに便利かもしれませんが、フォームやレポートを用いる場合はそちらで関数を使った方が使える関数も多く便利なため、なかなか使いどころが難しいです。


既定値プロパティでの使用

f:id:accs2014:20161111001823p:plain:right:w400

 既定値プロパティに値を設定すると、新規レコードへの値の入力の手間を省くことができますが、ここでも関数が使えます。
 例としてこのようなテーブルを用います。


f:id:accs2014:20161111001822p:plain:right:w400

 デザインビューに移り、「販売日」列の既定値プロパティに「=Date()」と入力します。Date関数はシステムの日付を返す関数ですので、これにより新規レコードの「販売日」列に自動的にシステムの日付(今日の日付)が入力されます。


f:id:accs2014:20161111001821p:plain:right:w400

 データシートビューです。新規レコードにシステムの日付が表示されているのがわかります。


入力規則プロパティでの使用

f:id:accs2014:20161111001820p:plain:right:w400

 入力規則プロパティに値を設定すると、入力される値に一定の制約を課すことができますが、ここでも関数が使えます。
 例として「販売日」列の入力規則プロパティに「<=Date()」と入力します。
 これにより、「販売日」列にはシステムの日付より後の日付(明日以降の日付)を入力することができなくなります。


f:id:accs2014:20161111001819p:plain:right:w400

 データシートビューです。販売日の値としてシステムの日付(2016/11/10)より大きい値を入力しようとするとエラーとなります。





クエリでの使用

 クエリはテーブルをもとにして必要な形のデータに加工しするためのものですので、ここでは関数が多用されます。
 例として右のテーブルを用いて、住所の文字数を求めてみます。
 クエリデザインを開きテーブルを表示させた上で、表示する列を表す部分に次のように記入します。

(図)

   住所長さ:Len([住所]) 

 「住所長さ:」という部分は、クエリでの列名を定める部分です。
 これをデータシートビューでみると、列名と関数の実行結果がきちんと表示されていることがわかります。

(図)

 なお、「Len(住所)」とか「=Len([住所])」と入力しても自動的に列名が付与されたうえで列名には[]が補われ、「式1:Len([住所])」というように変換されます。

(図)

Excel関数との違い

 さて、Accessでの関数の使用の実例をみてきましたが、Excelとの大きな違いとして、引数として列名を指定することはできるものの、「この列のうち1行目から10行目までを対象とする」といったような、セル範囲指定ができないことが挙げられます。関数によっては「この列のうち値が5以上のもののみを対象とする」といった条件をつけて絞り込むことができますが、必要とするデータを位置関係で示すということはできません。
 データベースはデータの位置(Excelでいうセル位置、セル座標)という考え方が存在しませんし、それで十分に機能することがわかっているためそういう仕組みになっているのですが、慣れないうちは不便に思われるかもしれません。