プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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(歳)
と計算されたので多分大丈夫だと思いますが。。。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/09/07 11:38

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も文字列として入力した方がいいような気がしますが、基本的に未来の日付であるなら、問題ないです。
    • good
    • 1

一旦100年ほど足して計算させてみては?



生まれた年に1000年足して、3007年の誕生日を
計算してみるとか。
(日数まで計算したいなら、閏が入って微妙にずれますが。)
    • good
    • 0

1800年代生まれで今生きてる方はいないと思いますが...



A2:誕生日として
=IF(ISTEXT(A2),DATEDIF(SUBSTITUTE(A2,"18","19",1),"2007/3/31","y"),DATEDIF(A2,"2006/3/31","y"))
として100年ずらせば計算できます。
    • good
    • 0

こんにちは



↓こちらが参考になりませんか?
http://excelfactory.net/excelboard/exgeneral/exc …

この回答への補足

Kaisendonさま
早速回答を頂ありがとうございます。
参考のHPを拝見させていただきましたが、式の
内容がよく分かりませんでした。
もし、式の内容が分かれば解説をお願いしたのですが。

=YEAR(TODAY())-LEFT(A1,4)
-(DATE(YEAR(TODAY()),MID(A1,6,2),RIGHT(A1,2))>TODAY())

補足日時:2005/09/06 23:09
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!