- ベストアンサー
Excel 関数で年数(期間)計算したいのですが
Excel 関数で次のような年数(期間)計算したいのですが、どのようにすればできますか? 教えてください。1900年以前の計算です。 たとえば、現在、2011年6月2日 と1868年11月4日は何年あるいは何日たっているか、という 問題です。 datedif関数でもうまくいきませんでしたが、そもそも関数でやることは無理なんでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
すみません、少し確認したい事があります。 今現在、日本を含む多くの国々で使用されている暦はグレゴリオ暦と言って、1904年や1908年の様に「4で割り切れる年」は閏年とするものの、1700年、1800年、1900年の様に、「100で割り切れて、400では割り切れない年」は閏年としない(従って、1600年や2000年は閏年となる)、という日付の数え方をしています。 このグレゴリオ暦が使われる以前は、単純に「4で割り切れる年」を閏年とするだけのユリウス暦という日付の数え方が広く使われていました。 グレゴリオ暦はローマ教皇グレゴリウス13世の発令によって、ユリウス暦の1582年10月4日の翌日を、グレゴリオ暦の1582年10月15日とする事で始まりました。 つまり、1582年10月4日と1582年10月15日の間を境として、その前後では日付の数え方が異なるため、1582年10月15日よりも前の日付に対して、現代と同じ日付の数え方で計算すると、現実の歴史で経過した日数と、計算で求めた日数が異なってしまうという問題があります。 そこで確認したいのですが、質問者様は、1582年10月15日よりも前の日付を扱う際には、グレゴリオ暦に換算し直した日付で扱われるのでしょうか、それとも、ユリウス暦等の、その他の暦法で表した日付で扱われるのでしょうか? 更にややこしい事には、グレゴリオ暦を採用し始めた時期は、国によって異なっていますし、現代においてもグレゴリオ暦を採用していない国もあります。 例えば、旧ソビエト連邦では、ロシア革命直後の1918年2月14日にグレゴリオ暦を採用し、それ以前はユリウス暦を使っていましたから、ロシアの「十月革命」が起きた日である1917年10月25日は、ユリウス暦の日付であり、当時既にグレゴリオ暦を採用していた日本の日付では、1917年11月7日の出来事になります。 又、グレゴリオ暦以前に使われていた暦法が、ユリウス暦であるとは限りません。 例えば、日本で1873年(明治6年)1月1日よりも前に使われていたのは、太陰太陽暦の一種である天保暦ですが、これには閏年以外に、閏月というものがあり、1年が12ヶ月の年と、13ヶ月の年があるという複雑なものです。 歴史や記録等では、当時、そこで使われていた暦法のままに日付を表示している事の方が多いため、どの暦法で表された日付なのかを無視すると、経過日数が異なってくる恐れがあります。 そこで確認したいのですが、質問者様は、各々の過去の日付に関して、どの暦法で表した日付を取り扱われるおつもりなのでしょうか?(単純に全てグレゴリオ歴で表した日付で計算しても宜しいのでしょうか?) 因みに、太陰太陽暦は月の満ち欠けを基にした暦法で、月の満ち欠けの周期は、地球の潮の満ち引きや、太陽系の他の惑星の引力等の影響を受けて、複雑に変化し続けていますから、太陰太陽暦の日付を、誤差無しにExcelで求める事は出来ません。 【参考URL】 グレゴリオ暦 - Wikipedia http://ja.wikipedia.org/wiki/%E3%82%B0%E3%83%AC%E3%82%B4%E3%83%AA%E3%82%AA%E6%9A%A6
その他の回答 (4)
- keithin
- ベストアンサー率66% (5278/7941)
A1に1868/11/14あるいは1984/5/4などを記入 年数: =DATEDIF(IF(ISTEXT(A1),(LEFT(A1,FIND("/",A1)-1)+2000)&MID(A1,FIND("/",A1),9),A1),IF(ISTEXT(A1),2000)+YEAR(TODAY())&TEXT(TODAY(),"-mm-dd"),"Y") 月数: =DATEDIF(IF(ISTEXT(A1),(LEFT(A1,FIND("/",A1)-1)+2000)&MID(A1,FIND("/",A1),9),A1),IF(ISTEXT(A1),2000)+YEAR(TODAY())&TEXT(TODAY(),"-mm-dd"),"M") 日数: =DATEDIF(IF(ISTEXT(A1),(LEFT(A1,FIND("/",A1)-1)+2000)&MID(A1,FIND("/",A1),9),A1),IF(ISTEXT(A1),2000)+YEAR(TODAY())&TEXT(TODAY(),"-mm-dd"),"d")
お礼
回答ありがとうございました。 このような長い関数は初めてです。ありがとうございました。
例えば、誕生日が 1868/11/4 の C.Oteroさんの本日現在の年齢を計算する場合、私なら添付図のようにします。 C2: =LEFT(B2,FIND("/",B2)-1) D2: =MID(B2,FIND("/",B2)+1,FIND("/",B2,FIND("/",B2)+1)-FIND("/",B2)-1) E2: =MID(B2,FIND("/",B2,FIND("/",B2)+1)+1,4) F2: =DATEDIF(DATE($C2+2000,$D2,$E2),DATE(YEAR(TODAY())+2000,MONTH(TODAY()),DAY(TODAY())),F$1) セル F2 を右へドラッグ&ペースト つまり、Oteroさんの年齢は 142歳6ヶ月と29日、滝廉太郎氏は 131歳9ヶ月と9日という次第。
お礼
回答ありがとうございました。 ハードコピーまで添付していただき、ありがとうございました。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 参考になるかどうか判りませんが、 「グレゴリオ暦」なるものがあるらしいです。 400年周期で曜日まで一致するとかどうとか・・・(←実際にそうなるのか判りません) 一応それを信用すると一つの案として、開始日・最終日(検索日)両方に400年をプラスしたもので DATEDIFが使えるような気がします。 ↓の画像(A2セルは文字列、B2セルは1900年以降のシリアル値としています)でC2セルに =DATEDIF(SUBSTITUTE(A2,LEFT(A2,4),LEFT(A2,4)+400),DATE(YEAR(B2)+400,MONTH(B2),DAY(B2)),"y")&"年"&DATEDIF(SUBSTITUTE(A2,LEFT(A2,4),LEFT(A2,4)+400),DATE(YEAR(B2)+400,MONTH(B2),DAY(B2)),"ym")&"ヶ月"&DATEDIF(SUBSTITUTE(A2,LEFT(A2,4),LEFT(A2,4)+400),DATE(YEAR(B2)+400,MONTH(B2),DAY(B2)),"md")&"日" という数式を入れています。 この結果が正確かどうかは自信がありません。 一つの考え方として参考になればと思い投稿しました。m(__)m
お礼
回答ありがとうございました。 詳しい説明をいただき、感謝いたします。
- mshr1962
- ベストアンサー率39% (7417/18945)
>1900年以前の計算です。 日付自体がシリアル値になりません。その為、通常の関数では出来ません 年計算の例 A1="1868/11/04" として =IF(ISNUMBER(A1),DATEDIF(A1,TODAY(),"Y"),YEAR(TODAY())-LEFT(A1,4)-(TODAY()<DATEVALUE(RIGHT(A1,5))))
お礼
回答ありがとうございました。 シリアル値かどうかをIF文で分けるんですね。不等号の意味を理解するのに時間がかかりました。”*1”はしなくてもいいんですね。
補足
ご指摘の問題は確かにありますね。私は、単純に1868年11月4日(日本です)は何日前だったのかを知りたかったのですが、日本でも暦は明治で変更されていますので、単純に現在の暦で何年、何ヶ月、何日前とはいえませんね。NO 5さんがご指摘されたように、過去のこと、外国のことについて、何年、何ヶ月、何日前ということは無意味な表現なのかもしれません。未来のことについては言えるでしょうが・・ 関数のことばっかり頭にあって、大事なことが抜け落ちていたようです。ご指摘、ありがとうございます。