• ベストアンサー

Excel関数で1800年代の年齢を算出する方法

Excel関数の DATEDIF を使って年齢の計算をしています。 具体的には、2006年3月31日時点での年齢を計算したいので、DATEDIF("誕生日","2006/3/31","Y")の 関数を利用しています。 しかし、1800年代の方の年齢はエラーとなり計算されません。 何かいい方法をご存知であれば教えて下さい。

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

  • ベストアンサー
  • kaisendon
  • ベストアンサー率44% (114/257)
回答No.5

こんばんは とりあえず大きな勘違い >2006年3月31日時点での年齢を計算したいので こちらを考えていませんでした。 =YEAR(TODAY())-LEFT(A1,4)-(DATE(YEAR(TODAY()),MID(A1,6,2),RIGHT(A1,2))>TODAY()) この式は「今日現在の年齢」を求める計算式になります。 DATE(YEAR(TODAY()),MID(A1,6,2),RIGHT(A1,2)) この部分で「その人の今年の誕生日」を求めています。 A1に1805/09/05と入力されていれば 今年の誕生日は 2005/09/05 A1に1805/09/08と入力されていれば 今年の誕生日は 2005/09/08 DATE(YEAR(TODAY()),MID(A1,6,2),RIGHT(A1,2))>TODAY() 比較演算子 > を使う事でこの部分は「倫理式」となります。 (この式の先頭に = を付けて空いているセルに入力して確認してみて下さい) 「その人の今年の誕生日」と 今日現在(2005/9/7)の日付を > で比べることで、 TUREかFALSEが返ります。 DATE(YEAR(TODAY()),MID(A1,6,2),RIGHT(A1,2))>TODAY() 2005/9/5>2005/9/7 ←今年の誕生日が来ていればFALSE 2005/9/8>2005/9/7 ←今年の誕生日がまだならばTRUE になります。 倫理値FALSEは 0(ゼロ) TRUEは 1 として扱われます。 なので 1805/09/05生まれの人の今日現在(2005/09/07)の年齢は =YEAR(TODAY())-LEFT(A1,4)-(DATE(YEAR(TODAY()),MID(A1,6,2),RIGHT(A1,2))>TODAY()) =2005-1805-FALSE =2005-1805-0 =200 (200歳、今年の誕生日はもう来ている)となります。 1805/09/08生まれの人の今日現在(2005/09/07)の年齢は =YEAR(TODAY())-LEFT(A1,4)-(DATE(YEAR(TODAY()),MID(A1,6,2),RIGHT(A1,2))>TODAY()) =2005-1805-TURE =2005-1805-1 =199 (199歳、今年の誕生日はまだ来ていない)となります。 >2006年3月31日時点での年齢 ならば =2006-LEFT(A1,4)-(DATE(2006,MID(A1,6,2),RIGHT(A1,2))>DATE(2006,3,31)) とすればいいのではないかと思います。 (あまり深く検証していないので、間違っていたらゴメンナサイ) ※制限条件 誕生日を入力するセル(この式の場合A1) はあらかじめ「文字列」としておいて 西暦4桁/月2桁/日2桁 1980/01/07 のように 入力しておく必要があります。 ちなみに上記の式で 誕生日が2005/03/31の人の2006年3月31日時点での年齢は 1(歳) 誕生日が2005/04/01の人の2006年3月31日時点での年齢は 0(歳) と計算されたので多分大丈夫だと思いますが。。。

brett
質問者

お礼

試してみましたが、ちゃんと計算されました。 色々と丁寧に解説を頂きありがとうございます。

その他の回答 (4)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

A1に文字列(1900年以前は自動的に文字列になりますが)として"1800/4/1"のような日付が入っていて B1に日付として2006/3/31のような日付(シリアル値)が入っているとすると =YEAR(B1)-LEFT(A1,FIND("/",A1)-1)-(DATE(YEAR(NOW()),MONTH(B1),DAY(B1))>DATEVALUE(MID(A1,FIND("/",A1)+1,LEN(A1)))) のようにします。 単純に年を引き算して、その月日がまだ過ぎてなければさらに1を引きます。 (1900年以前と以後を)統一的に扱うには、B1も文字列として入力した方がいいような気がしますが、基本的に未来の日付であるなら、問題ないです。

  • haukappu
  • ベストアンサー率15% (46/296)
回答No.3

一旦100年ほど足して計算させてみては? 生まれた年に1000年足して、3007年の誕生日を 計算してみるとか。 (日数まで計算したいなら、閏が入って微妙にずれますが。)

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

1800年代生まれで今生きてる方はいないと思いますが... A2:誕生日として =IF(ISTEXT(A2),DATEDIF(SUBSTITUTE(A2,"18","19",1),"2007/3/31","y"),DATEDIF(A2,"2006/3/31","y")) として100年ずらせば計算できます。

  • kaisendon
  • ベストアンサー率44% (114/257)
回答No.1

こんにちは ↓こちらが参考になりませんか? http://excelfactory.net/excelboard/exgeneral/excel.cgi?mode=all&namber=52235&rev=0

brett
質問者

補足

Kaisendonさま 早速回答を頂ありがとうございます。 参考のHPを拝見させていただきましたが、式の 内容がよく分かりませんでした。 もし、式の内容が分かれば解説をお願いしたのですが。 =YEAR(TODAY())-LEFT(A1,4) -(DATE(YEAR(TODAY()),MID(A1,6,2),RIGHT(A1,2))>TODAY())