■ 社員を年代別に集計するクロス集計クエリ作成 (2000,2002,2003,2007)
社員テーブルの登録されている社員を年代別に集計するクロス集計クエリを作成します。社員を年代別に集計するには、Partition関数を使用します。
1. 新規データベース作成
Accessを起動したら、ツールバーから新規作成のアイコン
をクリックして、作業フォルダworkに新規データベースW055.mdbを作成します。
2. テーブルとモジュールをインポート
Windowsのエクスプローラを起動したら、055.mdb(このページの最後からダウンロードできます)をダブルクリックして開きます。055.mdbのデータベースウィンドウが表示されたら、tbl社員をドラッグしてW055.mdbのデータベースウィンドウにドロップします。055.mdbのデータベースウィンドウのオブジェクトから[モジュール]をクリックしたら、basDateTimeをドラッグしてW055.mdbのデータベースウィンドウにドロップします。テーブルとモジュールをインポートしたら、03-01.mdbを閉じます。モジュールbasDateTimeには、誕生日から年齢を計算するfsAge関数が登録されています。
3. 新規クエリ作成
データベースウィンドウのオブジェクトから[クエリ]をクリックして選択したら、新規オブジェクトのショートカットから[デザインビューでクエリを作成する]をダブルクリックします。「テーブルの表示」ダイアログが表示されたら、[テーブル]タブから[tbl社員]をクリックして選択します。[追加]ボタンをクリックしてデザインビューに社員テーブルを追加します。[閉じる]ボタンをクリックしてダイアログを閉じます。
クエリのデザインビューが表示されたら、メニューバーから[クエリ]→[クロス集計]を選択します。tbl社員から在籍支社のフィールドをダブルクリックしてグリッドの1列目にコピーします。行列の入れ替えのドロップダウンリストから[行見出し]を選択します。2列目のフィールドに「年代: Partition(fsAge([誕生日]),21,60,10)」を入力します。行列の入れ替えから[列見出し]を選択します。3列目のフィールドから[社員ID]を選択します。集計のから[カウント]を選択します。行列の入れ替えから[値]を選択します。
ツールバーから上書き保存のアイコン
をクリックしたら「qry年代別社員集計」の名称で保存します。

図 新規クエリを作成したら「qry年代別社員集計」の名称で保存
4. データシートビューに切り替え
ツールバーからデータシートのアイコン
をクリックして切り替えます。データシートに、在籍支社別の社員数が年代別(30代→31:40、40代→41:50)に表示されます。

図 データシートに在籍支社別年代別の社員数が表示される
●解説
クロス集計クエリの列見出しに年代を表示するには、Partition関数を使用します。
構文
Partition(number, start, stop, interval)
Parition関数の引数numberには、評価する値を指定します。引数startとstopには、開始値と終了値を指定します。引数intervalには、加算値を指定します。
ここでは、年代の範囲を次のようなPartition関数で算出しています。
Partition(fsAge([誕生日]),21,60,10)
引数numberには、fsAge関数を指定して社員の誕生日から年齢を計算しています。引数startとstopには、21~60歳の範囲をしています。引数intervalには、10歳間隔で加算するようにしています。このPartition関数を実行すると、21:30, 31:40, 41:50, 51:60の年代が算出されます。該当する年代に社員がいないときは、列見出しは表示されません。
誕生日から年齢を計算するfsAge関数は、basDateTimeモジュールに登録されています。fsAge関数は、システム日付を基準に年齢を算出しています。
Public Function fsAge(dtmBirthDate As Date) As Integer
fsAge = DateDiff("yyyy", dtmBirthDate, Now()) + _
Int(Format(Now(), "mmdd") < Format(dtmBirthDate, "mmdd"))
End Function