• ベストアンサー

Excel 関数で年数(期間)計算したいのですが

Excel 関数で次のような年数(期間)計算したいのですが、どのようにすればできますか? 教えてください。1900年以前の計算です。 たとえば、現在、2011年6月2日 と1868年11月4日は何年あるいは何日たっているか、という 問題です。 datedif関数でもうまくいきませんでしたが、そもそも関数でやることは無理なんでしょうか?

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.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

yamato99
質問者

補足

ご指摘の問題は確かにありますね。私は、単純に1868年11月4日(日本です)は何日前だったのかを知りたかったのですが、日本でも暦は明治で変更されていますので、単純に現在の暦で何年、何ヶ月、何日前とはいえませんね。NO 5さんがご指摘されたように、過去のこと、外国のことについて、何年、何ヶ月、何日前ということは無意味な表現なのかもしれません。未来のことについては言えるでしょうが・・ 関数のことばっかり頭にあって、大事なことが抜け落ちていたようです。ご指摘、ありがとうございます。

その他の回答 (4)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.4

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")

yamato99
質問者

お礼

回答ありがとうございました。 このような長い関数は初めてです。ありがとうございました。

noname#204879
noname#204879
回答No.3

例えば、誕生日が 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日という次第。

yamato99
質問者

お礼

回答ありがとうございました。 ハードコピーまで添付していただき、ありがとうございました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 参考になるかどうか判りませんが、 「グレゴリオ暦」なるものがあるらしいです。 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

yamato99
質問者

お礼

回答ありがとうございました。 詳しい説明をいただき、感謝いたします。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

>1900年以前の計算です。 日付自体がシリアル値になりません。その為、通常の関数では出来ません 年計算の例 A1="1868/11/04" として =IF(ISNUMBER(A1),DATEDIF(A1,TODAY(),"Y"),YEAR(TODAY())-LEFT(A1,4)-(TODAY()<DATEVALUE(RIGHT(A1,5))))

yamato99
質問者

お礼

回答ありがとうございました。 シリアル値かどうかをIF文で分けるんですね。不等号の意味を理解するのに時間がかかりました。”*1”はしなくてもいいんですね。

関連するQ&A

  • エクセルで勤続年数を計算しているのですが・・

    いつもお世話になっております。 今回はエクセルの計算式について、ご指導の程お願い致します。 勤続年数の計算をexcel2007で管理したいと思っています。 例えば2011/12/21入社で、2012/3/20退社とします。 今までの計算からしますと、「0年3か月と0日」の勤続年数としたいのですが DATEDIFで計算しましたところ、「2か月と28日」となりました。 下記は現在の計算式です。 「=DATEDIF(A6,B6,"Y")&”年”&DATEDIF(A6,B6,"YM")&"ケ月"&(DATEDIF(A6,B6,"MD"))&"日"」 極端な話ですが、1/1入社で1/2退社ですと勤続年数は「2日」としていますので 単純に計算式に「+1」を加えると「2か月と29日」でカレンダーで勘定したところ正解ではあるのですが、「3か月と0日」にしたいと思っています。 基本的な考え方に問題があるのでしょうか? 色々調べてみたのですが、解決に至らず困っております。 ご指導の程、宜しくお願い致します。

  • 期間を求めるエクセル関数について

    期間を求めるエクセル関数について DATEDIF(B14,B16,"Y")&"年"&DATEDIF(B14,B16,"YM")&"ヶ月"という関数で求められる数値に+1にする関数があれば教えて下さい。 例えば、1983年4月~1985年6月の期間を上記の関数で求めると2年2ヶ月(26ヶ月)になるのですが、2年3ヶ月(27ヶ月)としたいのですがどうしたら良いでしょうか? 単純に考えて+1にすればいいので簡単なのかと思ったのですが、なかなか関数が作れませんでした。。。

  • エクセルでの経過日数計算

    エクセルで経過日数計算に「DATEDIF」関数を使用しています。 「DATEDIF」関数では、経過の年数のみとか日数のみでの表示になりますが、 それを「○年○ケ月と○日」と計算させるにはどのようにすれば 良いのでしょうか?

  • エクセルで経過年数の平均

    エクセルで、DATEDIF(A1,B1,"Y")&"年"&DATEDIF(A1,B1,"YM")&"ヶ月"と関数を使い、経過年数&月数を「○年○ヶ月」と計算するデータを作りました。 さらに、計算された経過年数&月数の平均を求めたいのですが上手くいきません。 どうすればいいでしょうか?よろしくお願いします。

  • エクセル 年数 計算

    エクセルで年数を計算したいのですが、以下の式で#NUMと出ます。 いったいなにが悪いのでしょうか? =DATEDIF(YEAR(TODAY()),YEAR(H24),"y") H24には1983/1/4と入っています。

  • エクセルの期間計算

    基準日9月30日で入社した従業員の勤続月数をエクセルで計算しているのですが、入社日が1日の方だけ、正しく計算されません。 具体的には、4月1日入社で基準日9月30日で、6ヶ月と返してもらいたいのですが、5ヶ月で返ってきます。関数式は =DATEDIF(E20-1,$A$2,"Y")&"年"&DATEDIF(E20-1,$A$2,"YM")&"ヶ月" と入れております。$A$2が基準日になっています。  E20には入社年月が日付で入っています。 月の途中で入社した方は正しく○年○ヶ月と返されるのです。

  • EXCEL DATEDIF関数について

    質問があります。 EXCELのDATEDIF関数で日付の期間内の年数、月数、日数、時間を2つのデーターから算出したいのですが、うまくできません。 そもそもDATEDIF関数では時間に対しては対応できないのでしょうか? また算出できる方法が有れば教えて頂けないでしょうか? データー基(例) A,14/04/30 00:01 B,14/05/02 05:03 宜しくお願い致します。

  • エクセルで勤続年数、年齢により勤続年数を変える

    社員の勤続年数について、エクセルでの計算について知恵を貸して下さい。 基準日は毎年4月1日現在で勤続年数を計算します。ただし、60歳に達した者については、60歳に達した日後の最初の4月1日以降の勤続年数は計算しない。なお、55歳に達した日後の最初の4月1日から60歳に達した日後の最初の3月31日までの勤続年数は実勤続年数の1/2とします。 単純な採用日から4月1日までの計算はDATEDIFを使ってできるのですが、55歳(60歳)に達した日後の最初の4月1日(3月31日)に手こずっております。 よろしくお願いします。

  • 勤続年数の平均値の求め方

    こんにちは、エクセルについて教えてください。 ある会社での各社員の勤続年数の計算でA列に入社年月日、B列に本日の年月日があり、C列にAとBの期間(勤続年数)計算を =DATEDIF(A30,B30,"Y")&"年" & DATEDIF(A30,B30,"YM") & "月"で ●年●月で表示させています。 さて、この各社員の勤続年数の平均を出すために通常のAvarage関数を使うと「ゼロで割りました」のメッセージが出て計算してくれません。勤務年数の平均を求める方法を教えてください。

  • エクセル関数で期間を求める方法について

    エクセル関数で期間を何年何ヶ月と1個のセルに求める方法が過去の質問の回答で A1にスタート(開始日) B1にエンド(終了日) C1セルに =DATEDIF(A1,B1,"Y")&"年" & DATEDIF(A1,B1,"YM") & "月" カレンダの応答日主義で1ヶ月を数える計算がありました。 これとは別に何年何ヶ月の月計算を属した日から属した日までの月数 (例)開始日2005年3月31日~終了日2005年4月1日の場合2ヶ月で計算させる方法を A1にスタート(開始日) B1にエンド(終了日) C1セルに 何と入れたら良いかどなたか教えてください。

専門家に質問してみよう