- ベストアンサー
Excel上で世代別にカウントしたい
Excel2002で、シート上のA列に生年月日の「年」(1960、1982、1971など)が入っています。その数値を使って、現時点(つまり今だと2002年)で10代以下、20代、30代、40代、50代、60代以上が何人いるかカウントして、特定のセルにその数値を返したいのです。つまりそれぞれの属性を表にしておいて、「年」欄に新たに数値が追加されたときに自動更新させるためには、どのような関数を用いればよいでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
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 ではできませんでした。
その他の回答 (4)
- peso
- ベストアンサー率41% (40/97)
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 代の人数が出ますよね。
お礼
なるほど!よくわかりました。勉強になりました。いろいろどうもありがとうございました。
- nishi6
- ベストアンサー率67% (869/1280)
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)
今、ミスを発見したので訂正を・・ 60代以上 =SUM(IF(YEAR(TODAY())-A1:A200>=60,1,0))-COUNTBLANK(A1:A200)
- nek784
- ベストアンサー率35% (145/411)
A列に生年月日の西暦年が現時点の年齢をB列に表示するには B列に「=YEAR(TODAY())-A2」と入力すれば現時点の年齢がでると思います。 しかし,年代別のカウントですが, 10代以下と60代以上のカウントはCOUNTIFで簡単に式が入力できますが, 20代~50代については全体から他の年代を引いて求めるということになります。 例)10代以下の求める式(B2からB17まで年齢がはいっているとします。) 「=COUNTIF($B$2:$B$17,">10")」
お礼
ありがとうございました
補足
年齢を求めた列を別に作ることなく年代別にカウントすることは無理なのでしょうか?ダメなら諦めて見えない列を作ろうと思いますが・・・。
お礼
ありがとうございます
補足
A:Aでできないのは非常に残念ですが、助かりました。ありがとうございました。もしよかったら、一つでいいので、式の解説をしていただけませんか?それから「Ctrl + Shift + Enter 」は知りませんでした。これはどういう意味なのでしょう?お手数おかけしますがよろしくお願いします。