[[20100921120303]] 『日数の計算』(まんぼ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『日数の計算』(まんぼ)
お世話になります。
例えばA1に2010/9/10、B1に1990/8/20と入っていてBからAまでの経過年数を
C列に年D列に月E列に日というように、何年何ヶ月何日経過したというように表示したいのですが、どのような計算式を入れればよいですか?

 =DATEDIF(B2,A2,"y")&"年"&DATEDIF(B2,A2,"ym")&"ヶ月"&DATEDIF(B2,A2,"md")&"日"

 などいかがでしょうか?

 (あっくん)

 ↑間違いではありませんが、DATEDIF関数は、マイクロソフトが正式にサポートしているものではなさそうです。
 上記の例では、特に月、日を求める部分はバグを含んでいるので注意が必要です。
http://www.niji.or.jp/home/toru/notes/50.html

 これなどが参考になるかもしれません。(sato)


 ↑参考にさせていただきました。
 リンク先で『バグ』と指摘されているものは、私の環境(WinXPSP3+Excel2002SP3)では再現しません
 でした。
 依然Lotus1-2-3との違いはいくつかあるようですが、私にはExcel(DATEDIF関数)の方が
 『理にかなっている値』を示している様に思えます。
 私の感想ですが、(少なくとも私の環境では)DATEDIF関数はそれほど毛嫌いしなくても良いでしょう。
 2010/09/23 01:00 (ちゅうねん)

 >(少なくとも私の環境では)DATEDIF関数はそれほど毛嫌いしなくても良いでしょう。

 私は、誰の環境であっても、MDとYDは使うべきではないと思っています。

 少なくとも、何らかの補正処理を加えないと使えないです。
 でも、補正方法を考えるくらいなら、自分で理解できる式を組んだ方が楽である。

 ※ そちらの環境で、開始日1/30、終了日3/1で、"MD" だとどうなりますか?

  私のXL2000とXL2007では、こうなりました。
               ↓
  行  ____A____  ____B____  _C_
   1  2010/1/30  2010/3/1    -1  ← C1セル =DATEDIF(A1,B1,"MD")

 "MD"って、余りの日数を出す関数と思っているのですが、マイナスが出てきます。

 (半平太) 2010/09/23 08:08

 下記ページを参照しました。
 http://www.kenzo30.com/ex_kisotyu/ex_ks_tyukyu9_9_2.htm

 ↑
 どなたですか?
 HNを明記するルールになっております。ご協力をお願いします。

 そのページに
  『この関数はバグを抱えており取り扱いに注意が必要です。』
  『"MD"と"YD"の計算にはバグがあります。』
 と書かれているでしょう?

 でも、どう対処すればいいか書かれていませんので、結局、使えないです。
 (原因も閏年が関係している様な、いない様な・・・・まぁ、私は関係しないと思っておりますけども。)

 (半平太) 2010/09/24 11:24

 私の確認が甘かったようです。すみませんでした。
 Win2KSP4+Excel2002SP3、WinXPSP3+Excel2002SP3、WinXPSP3+Excel2003SP3
 の、どの環境でも、下の式はマイナス1になりました。確かに使うべきではなさそうです。
               ↓
  行  ____A____  ____B____  _C_
   1  2010/1/30  2010/3/1    -1  ← C1セル =DATEDIF(A1,B1,"MD")

 [半平太]さんのおっしゃるとおりでした。 認識を新たにしました。ありがとう。
 2010/09/25 0:40 (ちゅうねん)

 議論も終結しているようですが
 横から失礼します

 今回の質問のような、経過年数・月数・日数を求めるのは大変難しいと思います。
 それは、条件が定かでないからです。
 (何を持って一年、一ヶ月とするかが その時々によって違うからです)

 特に日数は難しい
 一ヶ月の定義が 
 暦の月、応当日、応当日の前日(応当日の翌日) をもって一月とする の   
 おおよそ3つ考えられます

 応当日、応当日の前日が無い場合の例外規定が必要になります
 また、起算日時を開始日、または終了日 にするかでも違ってきます

 >DATEDIF関数は、マイクロソフトが正式にサポートしているものではなさそうです。
 >特に月、日を求める部分はバグを含んでいるので注意が必要です
 上記で記載しましたが、条件が定かでないにもかかわらず、あたかも正解があり、
 それと違った値になることを持ってバグと切り捨てていいのでしょうか?

 DATEDIF関数も当然ある一定の規則によって計算されていると思います。

 憶測で
 DATEDIF関数のMD  の動き
 開始日、終了日  の日にちの大小によります
 ・開始日の日にち<終了日の日にち の場合   終了日の日にち−開始日の日にち
 ・開始日の日にち>終了日の日にち の場合
   終了日-終了日の前月該当日(開始日の日にち)

 例
    行  ____A____  ____B____  _C_
    1  2010/1/30  2010/3/1    -1 
 2010/3/1−前月の該当日(2010/2/30・・・2010/3/2)   = -1
 (該当日がない場合は理論上の該当日付を使用)

 式にするとこんな感じではないでしょうか
 =B1-DATE(YEAR(B1),MONTH(B1)-(DAY(A1)>DAY(B1)),DAY(A1))
 (これが質問者が期待する回答かどうかは不明ですが・・)

 質問者の条件が不明ですが、開始日が 月末近く(29日以降)でなければ、気にすることはないと思います

 By

 > (何を持って一年、一ヶ月とするかが その時々によって違うからです)
 これについては、全く同感です。

 それを説明しない質問者と、それを確かめないで答える回答者が実に多いのに驚く。
 でも、そんなアバウトな人同士だと上手く噛み合って「解決!」になったりするのでへぇ―と思ったりする。

 > 上記で記載しましたが、条件が定かでないにもかかわらず、あたかも正解があり、
 > それと違った値になることを持ってバグと切り捨てていいのでしょうか?
 一般論としてはそうですが、MDとYDはそんなこと悠長なこと云ってられるような代物だとは思えません。

 バグを仕様と強弁するマイクロソフトでさえ、バグと認めたって話もあります。↓

 『DATEDIF関数の“受難” (第1回)』(田中亨)
 >マイクロソフトに尋ねたところ、引数が「"MD"」「"YD"」の計算にバグがあることを認めた。・・

 また、このバグは、
  2003以前(旧型バグ) → 2007(新型バグ → 一部修正)→ 2010(旧型バグ) 
 と云う変遷もあるらしく、安心して使えたものではありません。
   
 『「2007」に関数の不具合?――過ちを繰り返す「DATEDIF」の受難(第72回)』(田中亨)

 『AddIn Box』(角田 桂一)
http://www.h3.dion.ne.jp/~sakatsu/
 > ※ Excel2003以前と、Excel2007 ( SP無/SP1 ) では DATEDIF 関数の算出結果が異なります。
 >      2009/7/9  Excel2007 SP2 (及び 最新の修正アップデートを適用した SP1 ) で 2003以前の計算に
 >                     戻っています (YD では 一部、戻しきれていないケースが残っています) 。
 >      2010/2/26 Excel2010βで確認したところ、Excel2007(SP2 + KB 969682) [12.0.6504.5001] と同じです。
 >      2010/5/28 Excel2010(RTM) で確認したところ、残っていた[YD]の一部不一致も修正され Excel2003以前に完全に
 >                     戻りました(バグが完全に無くなったという意味ではありません。Excel2003以前と同じバグはあります)。

 ・・と云うことで、私としては安心して「バグ」と呼ばせて頂いております。

 (半平太) 2010/09/27 17:08

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.