• 締切済み

Excel97のDATEDIF関数について

Excel97でDateDifを使って期間の一ヶ月未満の日数を出したいのですが、 =DATEDIF("1999/3/31","2000/3/1","md") とすると答えは「-1」になってしまいます。 31日を"1999/3/30"に変えると「0」になります。 なぜこうなるのでしょうか。閏年の関係のようにも思えるのですが。

みんなの回答

  • telescope
  • ベストアンサー率54% (1069/1958)
回答No.3

Y年M月D日間を計算するなら、こんな式はどうでしょうか?   A       B 1 1999/3/31  2000/3/1 という表だとして、 =TRUNC(DATEDIF(A1,B1,"m")/12,0)&"年"&MOD(DATEDIF(A1,B1,"M"),12)&"月"&DAY(B1)&"日" とすると「0年11月1日」となります。 セルA1が月末と限らなければ、 =TRUNC(DATEDIF(A1,B1,"m")/12,0)&"年"&MOD(DATEDIF(A1,B1,"M"),12)&"月"&DATEDIF(A1,DATE(YEAR(A1),MONTH(A1)+1,0),"d")+DAY(B1)&"日" 日数の計が月の日数を越える場合は、IF関数で条件付けをすることになりますが、長い間抜けな式になりそうなのでこの辺で。

  • telescope
  • ベストアンサー率54% (1069/1958)
回答No.2

"MD"を指定したときの返り値はややこしいですね。 =DATEDIF("1999/5/31","2000/5/1","md") では、「0」 =DATEDIF("1999/6/30","2000/6/1","md") では、「2」 =DATEDIF("1999/8/31","2000/8/1","md") では、「1」 となります。 前月が小の月で30日までしかないときに、31日まで指定してあれば、「0」になり、(5月の例) 前月が大の月で31日まであるときに、30日まで指定すると「2」になり、(6月の例) 前月が大の月で31日まであるときに、31日まで指定すると「1」になる。(8月の例) ようです。 これから見ると、 =DATEDIF("1999/3/30","2000/3/1","md") で「0」になるのは、2000年3月1日の前月が29日までであるところに、30日を指定すると、30日=1日ということで、「0」になるようです。31日にすれば1日追い越してしまうので、「-1」になるということでしょうか。 ちなみに、 =DATEDIF("1998/3/31","1999/3/1","md") は「-2」になります。

nishi6
質問者

お礼

細かく分析してくださってありがとうございます。12月は送別会や忘年会でPCを見る回数が少なくなってしまいます。 疑問なのは人間の「感覚」にあった日付のカウントがうまくできないからでしょうか。最初の日付の日<2つ目の日付の日の場合は余り抵抗なく結果が受け入れられます。出したい答えは'期間はY年M月D日です'ということですが、不等号が逆の場合は、最初の日付の月末までの日数+2つ目の日数を出すことになるのでしょうか?そうするとDateDif関数の機能に疑問が出てきてしまいます。私も引き続き調べて見ます。ありがとうございました。

  • shigatsu
  • ベストアンサー率26% (511/1924)
回答No.1

Excelって日付の計算については、そのまま計算可能ですよ。 セルに ="2000/3/1"-"1999/3/31" と入力して、セルの書式設定でユーザ定義を選び種類にdって入れてみてください。単純に日数を出したい場合は数値として表示してください。 実際には内部でTimeSerial値として計算されています。小数点以上が日数で、小数点以下が時間を表しています。 例えば 1.5 というのは、1日と12時間 を表します。 TimeSerialについてはヘルプにも記載されていますので一度読んでみてください。日付の計算がかなり柔軟にできることが判ると思います。

nishi6
質問者

お礼

早速、回答下さってありがとうございます。 説明不足でしたが、減算ではなくDateDifを使っているのは、減算を行なうと2つの日付が同日の場合、一ヶ月の日数が帰ってくるためです。同日の場合は「~ヶ月ちょうど」にしたい(帰ってくる答えは0日を期待)のですが・・・

関連するQ&A

  • ExcelのDatedif関数の不具合について。

    =DATEDIF("2010/4/20","2012/3/20","YD")・・・・334 =DATEDIF("2010/4/21","2012/3/20","YD")・・・・334 となってしまいます。 スタートが2008,2009,2010年では4/20,4/21ともに334ですが、2007,2011年では4/20は335、4/21は334となります。 うるう年が関係しているのは分るのですが、日付が1日変わっても日数は同じとなるので使用上不都合が生じています。 これはバグなのでしょうか。それともこのような仕様にする必要性があったのでしょうか。 また、これを修正するにはどのようにしたらよいのでしょうか。 よろしくお願いします。

  • DATEDIF関数の 引数 単位で”md”

    DATEDIF関数の 引数 単位で”md”で A1に2000/1/1 B1に2000/2/1と入力してあるとします =DATEDIF(A1、B1、”md”)の値が 0 になるのはどうしてでしょう ちなみに ”md”は1ヶ月未満の日数とあるのですが

  • EXCEL DATEDIF関数について

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

  • エクセル関数 DATEDIFについて

    エクセル関数が得意な方、答えが合っているか確認してください。 Q.Aさんの生年月日は1973/5/9で、2011/4/1現在の年齢を計算したい場合、 =DATEDIF(生年月日1973/5/9,2011/4/1現在,"y") ※実際には生年月日などのところに入っているのはセル番ですが・・・ 答えは37歳 Q.Aさんの入社日は1998/5/12で、2011/4/1現在の勤続月数を計算したい場合、 =DATEDIF(入社日1998/5/12,2011/4/1現在,"m") 答えは154月数 私のやり方と答え、これであっているのでしょうか? よろしくお願いします。

  • DATEDIF関数を使うには?

    ある質問を見ていて、日付と日付の間の日数を求める関数、DATEDIFを使うといいという回答を見ました。 「そういう関数あるんだ」とおもい、試してみたら、わたしのEXCELでは使えないようなのです。 =datedif(A1,B1,"m") と入力すると、#NUMという表示になります。 追加アドインなど必要なのでしょうか? WinXp Excel2003です。

  • エクセル2007で、DATEDIF関数が認識しない

    現在、パソコンにエクセル2007が入っています。 本(よくわかるエクセル2007)を参照に、勉強しているのですが、DATEDIF関数が認識しないようなのです… =DATE まで、直接入力すると、選択できる関数として、「=DATE」と「=DATEVALUE」しか表示されません。 ※ 添付画像は、=DAまでを入力した時の選択できる関数です。 =DATEDIFが出てこないので、直接、=DATEDIFまで入力し、=DATEDIF(開始日,終了日,"単位")を入れて、実行キーを押すと、当然ながら?#NAME?と出てしまいます。 そこから想像するに、自分のエクセル2007には、=DATEDIF関数は入っていないのか、又は、=DATEDIF関数が使えるようになっていない?と想像したのですが、解決方法が解りません。 原因と解決策の解る方、是非、アドバイスください。 ※ 解決策…自分のエクセル2007には、=DATEDIF関数は入っていない場合、=DATEDIF関数を追加する方法 ※ 解決策…、=DATEDIF関数が使えるようになっていない場合、使えるようにする方法 ※ 現在、OS:Windows7、エクセル2007を使用しています。

  • DATEDIF関数について

    賞味期限表を作っています(A8:飲み物名/B8:賞味期限日/B1:日付(TODAY関数仕様) 賞味期限残日数という別の表に、=DATEDIF($B$1,B8,"D")の関数を入力して日数が出るようにしたのですが、本日もしくは賞味期限日を含む日数が出ます。できれば、それを含まない表示にしたいです。 例)本日:2008/12/17 賞味期限:2009/1/17ならば 残日数を30と出るようにしたいです。よきアドバイスお願いします。 ちなみにエクセル2007と2003では残日数に変化がありますか? 2007では、31 2003では、32とでるのですが、勘違いだったらすみません。

  • EXCELのdays360とDATEDIF関数について

    現在text形式のデータをエクセル変換して集計してますが、日付データ(yyyy/mm/dd型)のデータ2つの間の日数を計算しようと思い、days360を使ってみましたが、返される値が『1901/01/日数』となってしまいます。同様にDATEDIFではエラーが出ます。元がテキスト形式から変換したデータで、量も膨大なため、いちいち""もかけられず、かといってTEXT関数やIF関数を使ってしたごしらえをすると容量が馬鹿みたいにでかくなってしまいます。 days360かdatedif関数のみでうまく日数のみ表現するにはどうしたらいいのでしょう?

  • 関数のDATEDIFに替わるものについて教えてください。

    関数のDATEDIFに替わるものについて教えてください。 入社年月日から今現在の勤続年数を『何年何ヶ月』と表示したいのですが、 エクセル2000にDATEDIF関数がありませんでした。 関数が苦手なので分かりやすく教えてください。 よろしくお願いします。

  • DATEDIF関数がうまく動かない

    win-Vistaで DATEDIF関数を使った式がうまく動きません。 =DATEDIF(a(昨年の明日),b(今日),"md")としたら、28(28日)と 返してきました。 他のPC(win-xp)でやれば勿論31で返してきます。 Vista側の基本設定のどこかがおかしいのでしょうか? PCの日時の設定は正しく表示します。   何でこんな変な事になるのでしょうか? 教えてください!  よろしくお願いします。

専門家に質問してみよう