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

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

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

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

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

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

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


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

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


その他の計算例

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

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


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

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

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

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


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

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