演算フィールド(計算フィールド)の作成

 クエリでは、テーブルに存在する列の内容をそのまま表示したり、列ごとに集計した値を表示することができます。
 また、それだけなく、ある列の値をもとに関数などを使って計算した結果や、複数の列をもとに計算した結果を、別の列(演算フィールド)として表示・記録することができます。
 テーブルにおいても「集計」型の列を設けることにより同じようなことは可能ですが、使用できる関数は非常に限られていますし、本来は生データを記録するべきオブジェクトであるテーブルに計算結果の列を持つというのは、人によってはちょっと抵抗のあるところかもしれません。一方でクエリではより多くの関数を使うことができ、複雑な計算を行うことができます。

演算フィールドの追加と計算の例

f:id:accs2014:20161204014209p:plain:right:w600

 例として右のようなテーブルを使ったクエリを作成し、演算フィールドを設けるものとします。

f:id:accs2014:20161204014208p:plain:right:w500

 クエリデザインの画面です。
 まずはテーブルのまま表示させるいくつかの列を選択したのち、演算フィールドにしようとする列のフィールド欄(一番上の行)に「生まれ月:Month([生年月日])」と記入します。
 「生まれ月:」というのは列名を定める部分で、これを省略すると「式1:Month([生年月日])」といったように適当な名前が自動的に割り当てられます。
 Month関数は日付データから「月」の値を取り出すための関数です。これによりそれぞれの会員が生まれた月が抽出されます。


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

 データシートビューです。狙いどおり、新たに設けた演算フィールドに各会員の生まれた月が表示されています。
 なお、演算フィールドも並べ替えのキーとしたり、抽出条件の指定対象とすることができます。


その他の計算例

f:id:accs2014:20161204014206p:plain:right:w600

 次の例として、上記と同じテーブルをもとにクエリを作成し、複数の列から値を計算し新たな列を設けることとします。
 テーブルのまま表示させるいくつかの列を選択したのち、演算フィールドにしようとする列のフィールド欄(一番上の行)に「能力合計:[力]+[知恵]+[素早さ]」と記入します。これで3つの能力値を足し合わせた数字が表示されるはずです。


f:id:accs2014:20161204014205p:plain:right:w500

 さて、無事に合計値が表示されています…が、一番下のレコードについては数値が表示されず空白(Null)となっているのがわかります。
 これは、四則演算の対象にNullが含まれていると(この場合は「知恵」列の値がNull)その結果もNullとなってしまうというAccessの性質のためです。
 

f:id:accs2014:20161204014232p:plain:right:w600

 計算結果がNullとならないようにするには、Nullを0とみなして計算する必要があります。そのときはNz関数を用いて「能力合計: Nz([力],0)+Nz([知恵],0)+Nz([素早さ],0)」とします。値がNullの列は0に置き換えて計算されます。


f:id:accs2014:20161204014230p:plain:right:w500

 今度はすべてのレコードに対し数値が表示されました。
 なお、四則演算のほか、多くの関数において引数(関数に渡される値)がNullだと戻り値もNullとなります。場合によってはエラーとなることもありますので注意が必要です。