10歳幅に分けて年齢分布を調べる(度数分布表の作成)

[Access 2016/2013/2010/2007]

本記事では、図1aのような[T_顧客]テーブルの[生年月日]フィールドのデータをもとに、「20~29歳は○人」「30~39歳は○人」という具合に、10歳幅の年齢層別に顧客数をカウントし、一般にいう「度数分布表」(図1b)を作成する方法を解説します。

図1a [T_顧客]テーブルで、年齢層別の人数をカウントして…(→図1b

図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()))

図2 式1を使用して、顧客の年齢を求める[Q_顧客]クエリを作成する。[顧客ID]はあとで使うが、[顧客名]と[生年月日]フィールドは入れなくてもOK。

図3 各顧客の年齢を計算できた。

Step2 年齢を10歳幅で分類する

[Q_顧客]クエリをもとに新しいクエリを作成し、式2の[年齢層]フィールドと[顧客ID]フィールドを追加します(図4)。式2については、次項の「詳解…年齢層計算の考え方」で解説します。

式2 20歳以上59歳以下の[年齢]を10歳幅に分けて「○~○」の形式で表示する
年齢層: Replace(Partition([年齢],20,59,10),":","~")

図4 新しいクエリの[フィールド]欄に式2と[顧客ID]を追加する。

いったんクエリを実行して、ここまでの結果を確認します(図5)。顧客IDごとに、その顧客の年齢層が表示されるはずです。

図5 30人分の顧客について、それぞれの年齢層が求められる。

Step3 同じ年齢層をグループ化して顧客数をカウントする

最後に、同じ年齢層ごとに顧客数をカウントしましょう。まず、クエリをデザインビューに切り替え、集計行を追加します。[年齢層]フィールドをグループ化し、[顧客ID]フィールドをカウントします(図6)。

図6
1)[デザイン]タブをクリックする。
2)[集計]ボタンをクリックして集計行を表示する。
3)[年齢層]で[グループ化][昇順]、[顧客ID]で[カウント]を選択する。
4)「顧客ID」の前にフィールド名として「人数:」と入力する。

クエリを実行すると、同じ[年齢層]ごとに顧客数がカウントされます(図7)。以上で、度数分布表の完成です。

図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、上の「手順解説」で使用した式)。

式2 20歳以上59歳以下の[年齢]を10歳幅に分けて「○~○」の形式で表示する
年齢層: Replace(Partition([年齢],20,59,10),":","~")

スポンサーリンク

関連記事