• ベストアンサー

Excel上で世代別にカウントしたい

Excel2002で、シート上のA列に生年月日の「年」(1960、1982、1971など)が入っています。その数値を使って、現時点(つまり今だと2002年)で10代以下、20代、30代、40代、50代、60代以上が何人いるかカウントして、特定のセルにその数値を返したいのです。つまりそれぞれの属性を表にしておいて、「年」欄に新たに数値が追加されたときに自動更新させるためには、どのような関数を用いればよいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • peso
  • ベストアンサー率41% (40/97)
回答No.2

A列すべてを選択、はできない気がしますが、データの入力される範囲を特定すれば何とかなりそうです。(この例では A1:A200 で集計しています。空白セルはあってもかまいません。) 10代以下 =SUM(IF(YEAR(TODAY())-A1:A200<20,1,0)) と、入力し、Ctrl + Shift を押しながら Enter で式を確定します。すると式が {=SUM(IF(YEAR(TODAY())-A1:A200<20,1,0))} のように { } で囲まれます。これで途中で年齢を求めなくてもカウントできます。 同じように20代 =SUM(IF(YEAR(TODAY())-A1:A200<30,1,0))-SUM(IF(YEAR(TODAY())-A1:A200<20,1,0)) で Ctrl + Shift + Enter 30代 =SUM(IF(YEAR(TODAY())-A1:A200<40,1,0))-SUM(IF(YEAR(TODAY())-A1:A200<30,1,0)) 40代 =SUM(IF(YEAR(TODAY())-A1:A200<50,1,0))-SUM(IF(YEAR(TODAY())-A1:A200<40,1,0)) 50代 =SUM(IF(YEAR(TODAY())-A1:A200<60,1,0))-SUM(IF(YEAR(TODAY())-A1:A200<50,1,0)) 60代以上 =SUM(IF(YEAR(TODAY())-A1:A200>=60,1,0 範囲変更はすべての A1:A200 を変更してください。 空白セルがあっても大丈夫なので、A1:A10000 でも多分大丈夫です。 ただし、A:A ではできませんでした。

noname#200418
質問者

お礼

ありがとうございます

noname#200418
質問者

補足

A:Aでできないのは非常に残念ですが、助かりました。ありがとうございました。もしよかったら、一つでいいので、式の解説をしていただけませんか?それから「Ctrl + Shift + Enter 」は知りませんでした。これはどういう意味なのでしょう?お手数おかけしますがよろしくお願いします。

その他の回答 (4)

  • peso
  • ベストアンサー率41% (40/97)
回答No.5

20代の式で説明します。 =SUM(IF(YEAR(TODAY())-A1:A200<30,1,0))-SUM(IF(YEAR(TODAY())-A1:A200<20,1,0)) これを前半と後半に分けます。 =SUM(IF(YEAR(TODAY())-A1:A200<30,1,0)) この式の YEAR(TODAY())-A1:A200 で年齢を求めています。 そして IF を使って 30 未満なら 1 を、そうでなければ 0 を返します。 ただし、 YEAR(TODAY())-A1:A200 なんて計算は普通ではできません。 なので、配列数式というもの (Ctrl + Shift + Enter のやつ) を使います。 配列数式を使うと、この式は IF(YEAR(TODAY())-A1<30,1,0) IF(YEAR(TODAY())-A2<30,1,0) IF(YEAR(TODAY())-A3<30,1,0)      ・      ・      ・ IF(YEAR(TODAY())-A200<30,1,0) のように連続で処理します。 そして、最後にこれらの合計を求めるために SUM を使っています。 後半の式も同じ理屈で 20 未満の人数を出し、前半の式から引いています。 30歳未満の人数 - 20歳未満の人数 で 20 代の人数が出ますよね。

noname#200418
質問者

お礼

なるほど!よくわかりました。勉強になりました。いろいろどうもありがとうございました。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

A2からA21まで生年月日があるとします。 D2からD7まで、10、20、30、40、50、60 を入力します。 E2 =COUNT($A$2:$A$21)-SUM(E3:$E$7) E3 =COUNTIF($A$2:$A$21,"<="&YEAR(TODAY())-D3)-SUM(E4:$E$7) E4 =COUNTIF($A$2:$A$21,"<="&YEAR(TODAY())-D4)-SUM(E5:$E$7) E5 =COUNTIF($A$2:$A$21,"<="&YEAR(TODAY())-D5)-SUM(E6:$E$7) E6 =COUNTIF($A$2:$A$21,"<="&YEAR(TODAY())-D6)-SUM(E7:$E$7) E7 =COUNTIF($A$2:$A$21,"<="&YEAR(TODAY())-D7) のようにします。 E3を入力すれば、E4、E5、E6はコピーできます。E7はコピーして修正します。

  • peso
  • ベストアンサー率41% (40/97)
回答No.3

今、ミスを発見したので訂正を・・ 60代以上 =SUM(IF(YEAR(TODAY())-A1:A200>=60,1,0))-COUNTBLANK(A1:A200)

  • nek784
  • ベストアンサー率35% (145/411)
回答No.1

 A列に生年月日の西暦年が現時点の年齢をB列に表示するには B列に「=YEAR(TODAY())-A2」と入力すれば現時点の年齢がでると思います。 しかし,年代別のカウントですが, 10代以下と60代以上のカウントはCOUNTIFで簡単に式が入力できますが, 20代~50代については全体から他の年代を引いて求めるということになります。 例)10代以下の求める式(B2からB17まで年齢がはいっているとします。) 「=COUNTIF($B$2:$B$17,">10")」

noname#200418
質問者

お礼

ありがとうございました

noname#200418
質問者

補足

年齢を求めた列を別に作ることなく年代別にカウントすることは無理なのでしょうか?ダメなら諦めて見えない列を作ろうと思いますが・・・。

関連するQ&A