• ベストアンサー

EXCEL DATEDIF関数について

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

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

  • ベストアンサー
  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.3

>そもそもDATEDIF関数では時間に対しては対応できないのでしょうか? >また算出できる方法が有れば教えて頂けないでしょうか? DATEDIF関数は開始日から終了日までの期間を計算する関数で年数、月数、日数までが対象です。 時間も含む場合は終了日時-開始日時として計算し整数部を日数、端数部を時間に分けて文字列に変換すべきでしょう。 A1=2014/04/30 00:01 B1=2014/05/02 05:03 C1=INT(B1-A1)&"日"&INT(MOD(B1-A1,1)*24)&"時間"&ROUND(MOD(MOD(B1-A1,1)*24,1)*60,1)&"分" C1セルは日数と時間数となります。 月数や年数を必要とするときは1ヶ月の日数、1年の日数を定義する必要があるでしょう。

komio777
質問者

お礼

無事思い通りの表示にいたりました。 結果、自分のスキルでは表示は出来なかったと考えさせられました。 お蔭さまで助かりました事お礼申し上げます。 有り難う御座いました。

komio777
質問者

補足

詳しいご回答有り難うございます。 計算方法は理解できましたし、私の考えを大きく超えた難題でしたw 有り難うございます。 ただEXCELに教えて頂いた計算を入れると、負の記号が付いてしまいます? 未来方向に時間が経過してるので、3日18時間58分と表示してもらいたいのですが、-3日18時間58分になってしまいます。 この表示を負の記号無で表示はできませんか? 加えてご回答頂けると助かります。 宜しくお願い申し上げます。

その他の回答 (4)

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.5

>ただEXCELに教えて頂いた計算を入れると、負の記号が付いてしまいます? 値の扱い方が違っています。 A1セルに開始日時を入力し、B1セルに終了日時を入力してください。 開始日時(2014/04/30 00:01)から終了日時(2014/05/02 05:03)を引けば負数になるのは当然のことです。 論理的には日時の間隔を算出する訳ですから負数を正数に置き換える場合はABS関数で対処できますが端数の扱いがありますので減算式を次のように変えてください。 B1-A1   ↓ ABS(B1-A1)

komio777
質問者

お礼

補足回答有り難うございました。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

Excelの日付や時刻は数値(シリアル値)で「時刻」になります。従って、ある時刻からある時刻の経過を時間として定義できます。 しかし、この時間を「~年~月~日経過」と捉えようとすると問題が発生します。1年は何日? 一カ月は何日?など定義が必要です。 DateDif関数はExcelでの定義で作られた関数です。これが自分で定義したい年月日と同じかどうかを確認して使うべきです。 (DateDif関数はLotus1-2-3との競合上作られて、Helpにも載っていないとの面白い話がいろいろあります) 業務で、勤続年数(まさに年、月、日)や保険料払込期間が必要になり、経過年月日を求めるわけですが、基本的にはDateDif関数は使えません。計算の定義が業務内容と一致しないことと、決定的な要因は下に書いた「おかしな結果」です。 結局、DateDif関数は使わず、独自のユーザー定義関数で対応しています。例えば、1月27日、28日、29日、30日、31日、2月1日の1ケ月後がいつになるか、平年や閏年を意識して定義する必要があるわけです。 ご参考に。 ●「md」でマイナスの値が返ってくる。   2013/03/31 ~ 2014/03/01 → -2 (md)   2013/03/30 ~ 2014/03/01 → -1 (md)  さらに閏年でその値が変わる。   2011/03/31 ~ 2012/03/01 → -1 (md)   2011/03/30 ~ 2012/03/01 →  0 (md) ●「ym」は日が同じで1カ月カウント。   2014/03/01 ~ 2014/05/01 →  2 (ym)  従って、期間日数が同じでも、1日違って1カ月違ってくる場合がある。   2014/01/31 ~ 2014/04/30 →  2 (ym)   2014/02/01 ~ 2014/05/01 →  3 (ym)   2013/12/30 ~ 2014/02/28 →  1 (ym)   2013/12/31 ~ 2014/03/01 →  2 (ym) ●「y」は日が同じで1年カウント。   2013/03/01 ~ 2014/02/28 →  0 (y)   2013/03/01 ~ 2014/03/01 →  1 (y)  従って、期間日数が同じでも、1日違って1年違ってくる場合がある。   2012/02/29 ~ 2014/02/28 →  1 (y)   2012/03/01 ~ 2014/03/01 →  2 (y)

komio777
質問者

お礼

ありがとうございました。

  • Cupper-2
  • ベストアンサー率29% (1342/4565)
回答No.2

前のかたの回答に追記です。 セルの書式は単に 時:分 ではなく、[h]:mm と言う形に成形です。 [ ]を付けることで24時間を超えた「時間」も表示できるようになり  53:02 などとと表示できます。

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

DATEDIF関数には、時間で計算する機能はありません。 年、月、日 =DATEDIF(A1,B1-(MOD(A1,1)>MOD(B1,1)),"Y") =DATEDIF(A1,B1-(MOD(A1,1)>MOD(B1,1)),"YM") =DATEDIF(A1,B1-(MOD(A1,1)>MOD(B1,1)),"MD") 時間 =MOD(B1-A1,1) セルの書式設定は時:分に。

関連するQ&A

専門家に質問してみよう