[Access 2016/2013/2010/2007]
本記事では、図1aのような[T_顧客]テーブルの[生年月日]フィールドのデータをもとに、「20~29歳は○人」「30~39歳は○人」という具合に、10歳幅の年齢層別に顧客数をカウントし、一般にいう「度数分布表」(図1b)を作成する方法を解説します。
目次
手順ダイジェスト
ここでは、以下の流れで度数分布表を作成します。
■年齢を計算するための[Q_顧客]クエリを作成
年齢: IIf(Format(Date(),"mmdd")<Format([生年月日],"mmdd"),DateDiff("yyyy",[生年月日],Date())-1,DateDiff("yyyy",[生年月日],Date()))
■[Q_顧客]クエリをもとに度数分布表を作成
年齢層: Replace(Partition([年齢],20,59,10),":","~")
手順解説
Step1 生年月日から年齢を計算するクエリを作成する
年齢層別の集計を行う準備として、[T_顧客]テーブルをもとに年齢を求めるクエリを作成し、「Q_顧客」の名前で保存します(式1、図2、図3)。年齢計算の考え方は、「生年月日から年齢を計算するには」を参照してください。
式1 [生年月日]フィールドと本日の日付をもとに年齢を計算する
年齢: IIf(Format(Date(),"mmdd")<Format([生年月日],"mmdd"),DateDiff("yyyy",[生年月日],Date())-1,DateDiff("yyyy",[生年月日],Date()))
Step2 年齢を10歳幅で分類する
[Q_顧客]クエリをもとに新しいクエリを作成し、式2の[年齢層]フィールドと[顧客ID]フィールドを追加します(図4)。式2については、次項の「詳解…年齢層計算の考え方」で解説します。
式2 20歳以上59歳以下の[年齢]を10歳幅に分けて「○~○」の形式で表示する
年齢層: Replace(Partition([年齢],20,59,10),":","~")
いったんクエリを実行して、ここまでの結果を確認します(図5)。顧客IDごとに、その顧客の年齢層が表示されるはずです。
Step3 同じ年齢層をグループ化して顧客数をカウントする
最後に、同じ年齢層ごとに顧客数をカウントしましょう。まず、クエリをデザインビューに切り替え、集計行を追加します。[年齢層]フィールドをグループ化し、[顧客ID]フィールドをカウントします(図6)。
クエリを実行すると、同じ[年齢層]ごとに顧客数がカウントされます(図7)。以上で、度数分布表の完成です。
なお、[顧客ID]をカウントしたのは、[顧客ID]フィールドは大元の[T_顧客]テーブルの主キーフィールドで、必ずデータが入力されているからです。未入力があるフィールドをカウントすると、数え漏れが出てしまいます。確実に顧客数をカウントするためには、確実にデータが入力されている主キーのようなフィールドをカウントしましょう。
詳解…年齢層の計算の考え方
上の「手順解説」で使用した式2について、詳しく見ていきましょう。
年齢を10歳幅で分類するにはPartition関数を使用します(構文1)。
構文1 数値がどの区分に含まれるかを調べる
Partition(数値, 範囲の先頭, 範囲の最後, 区分のサイズ)
20歳以上59歳以下を10歳の幅で分けるには、引数[範囲の先頭]に「20」、[範囲の最後]に「59」、[区分のサイズ]に「10」を指定します(式3)。20歳未満と60歳以上は、それぞれひとくくりにまとめられます。
式3 20歳以上59歳以下の[年齢]を10歳幅に分ける
年齢層: Partition([年齢],20,59,10)
Partition関数の戻り値は「20:29」「30:39」の形式ですが、それをわかりやすく「20~29」「30~39」の形式に変換するには、Replace関数を使用します(構文2、正式な構文はReplace関数のページを参照してください)。
構文2 文字列内の検索文字列を置換文字列に置き換える
Replace(文字列, 検索文字列, 置換文字列)
引数[文字列]にPartition関数を指定し、[検索文字列]に「":"」、「置換文字列」に「"~"」を指定すると、「20:29」「30:39」の中の「:」を「~」に変えられます(式2、上の「手順解説」で使用した式)。