- ベストアンサー
特定の日~特定の日までの日数を数える方法(EXCEL)
エクセルで、特定の日~特定の日までの日数を数える方法はありませんか? A1に入社日、B1に退職日を入力。 C1に入社日~退職日までの在籍期間。 表示は○年○ヶ月○日とする。 無理ですか?
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 #8 の続きです。 途中で疲れてしまったのでが、再度、やり直してみました。 =DATEDIF(A1,B1,"y")&"年"&DATEDIF(A1,B1,"ym")&"ヶ月"&IF(DAY(A1)>DAY(B1),DAY((MONTH(A1)+1&"/1")-1)-DAY(A1)+DAY(B1),DATEDIF(A1,B1,"md"))&"日" これで出来たと思います。 ただし、あくまでも、0ヶ月、0日という表示はします。 日付関係の問題は、いろんなバリエーションがあって、とても面白いです。
その他の回答 (8)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >「表示は○年○ヶ月○日とする。」というのは、表現がおかしいのではないですか。 しばらく考えてみました。ご指摘とは違うかもしれませんが、以下で、展開していきます。 これは、DATEDIF の作り方のコンセプトが、そういうものになっているようです。これは、Lotus123の関数をExcelが取り込んだものですね。 Excelの回答者で有名なチップパーソン氏の http://www.cpearson.com/excel/datedif.htm The DATEDIF Function に、今回の私の回答と同じものが出ています。しかし、この件は、もう少し、複雑のようなのです。 ------------------- 普通、ビジネスなら、DATEDIF は、(日付の)片入れですから、両入れにするなら、本来は、1日を足したほうがよいです。 =DATEDIF("2004/1/30","2005/10/1","MD") これは、「-1」と出てきてしまいます。これでは、ロジックが合いません。ひとつには、片入れの計算のための問題だとは思います。だから、片入れを両入れにすると、こういうことになるのですが……。 A1 B1 2005/1/30 2005/3/1 =DATEDIF(A1-1,B1,"MD") でも、これだと、0 になってしまいます。でも、0ではありませんね。 =DATEDIF(A1,B1,"YD") これで、30 日になりますから、片入れの計算ですが、これは、正しいですね。 (1/31-1日,2月-28日,3/1日) →30日 インターネット検索で、この周辺の話は出てくるようですが、やっぱり、"MD"のこの計算自体がおかしいですね。(^^; だって、日だけで計算できるはずがありませんもの。 これは、年をまたぐ場合は、年で別けて計算しないといけないようです。ちょっと、ここまでで疲れました。(^^;。。
お礼
とても丁寧にご回答いただいて、本当にありがとうございました。 エクセルについてはまだまだ知識がありませんが、またわからないことが出てきたらご回答よろしくお願い致します。
- imogasi
- ベストアンサー率27% (4737/17069)
>特定の日~特定の日までの日数を数える と表題に書きながら、「表示は○年○ヶ月○日とする。」というのは、表現がおかしいのではないですか。 カレンダーに基づいた年月数とでも表現すべきでは。 これから人生で色々な場面で、誤解する表現は恐ろしい結果を招きますよ。
- Wendy02
- ベストアンサー率57% (3570/6232)
mshr1962 さんへ どうもありがとうございます。 0日と表示するべきかは考慮したのですが、生のままで出したほうがよいかと思い、そのままにしてしまいました。(^^;
- mshr1962
- ベストアンサー率39% (7417/18945)
#2,3のmshr1962です。 #4 Wendy02さんへのフォロー =DATEDIF(A1,B1,"y")&"年"&DATEDIF(A1,B1,"ym")&"ヶ月"&DATEDIF(A1,B1,"md")&"日" にTEXT関数を加えれば出来ますよ。 =TEXT(DATEDIF(A1,B1,"y"),"0年;;")&TEXT(DATEDIF(A1,B1,"ym"),"0ヶ月;;")&TEXT(DATEDIF(A1,B1,"md"),"0日;;") これで年月日が0の場合、省略されます。
お礼
下の方のを入れたら、年月日の0が消えてスッキリしました。 ありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 #1 ororo1208さんのバックアップ >この方法は、年月日をそれぞれ違うセルに分けなければできないということですか? お試にはならなかったようですね。詳しくは、ヘルプで調べてください。 C1:~ =DATEDIF(A1,B1,"y")&"年"&DATEDIF(A1,B1,"ym")&"ヶ月"&DATEDIF(A1,B1,"md")&"日" 悔しいことに、今まで他の方法を試してみましたが、このような方法以外は、あまりうまくいきません。たぶん、できるような気がしますが、長い式になるはずです。それは、0日とか、0月というものは、日付書式には存在しないからです。年の差を取り、残りを月の差を取り、最後は、日付の差を取るという計算です。 しかし、日付ならば、 単に、=DATEDIF(A1,B1,"d")&"日" で、=B1-A1 と変わらないはずです。 (ちなみに、この関数は、MS社オリジナルではありませんので、挿入-関数の日付の関数の中にはありません。) 例: 2000/8/6 ~ 2005/10/6 という時に、 5年2ヶ月0日 という表示が出てきます。つまり、5年2ヶ月であって、それ以上でも、それ以下でもないからです。
お礼
試したんですけどね。 &で繋げられる事がわからなかったです。 エクセルを習ったことがないので理解が遅くてスミマセンです。 #3の方法と#4の方法では答えが違って出てきます。 #3は 2004/1/1~2004/12/31 → 00年12ヵ月31日 2004/1/1~2005/1/1 → 01年 1ヵ月 1日 #4 2004/1/1~2004/12/31 → 0年11ヶ月30日 2004/1/1~2005/1/1 → 1年 0ヶ月 0日 普通に考えると#4が正しいですよね? 日付って考え出すとわけがわからなくなっちゃいます。 2004/1/1~2005/1/1って1年なのか1年と1日なのか。。。
- mshr1962
- ベストアンサー率39% (7417/18945)
#2のmshr1962です。 >今日現在の方法がうまくいきません。そのままコピーしているのですが。。。 すみません。単純な記述ミスです。 =IF(B1="",TODAY(),B1)-A1+1 ですね。C1は自己セルですので...
お礼
訂正していただいたものをいれたらできました。 ありがとうございました。
- mshr1962
- ベストアンサー率39% (7417/18945)
>表示は○年○ヶ月○日とする。 なら =IF(B1="","",B1-C1+1) で出来ませんか? 退職以外の場合に、今日現在の在籍期間なら =IF(B1="",TODAY(),B1)-C1+1 後はセルの書式設定の表示形式をユーザー定義で yy年mヵ月d日 とする。
補足
回答ありがとうございます。 今日現在の方法がうまくいきません。 そのままコピーしているのですが。。。
- oriro1208
- ベストアンサー率40% (66/165)
こんにちは。 DATEDIF関数を試されることを お勧めします。 「=DATEDIF(A1,B1,”X”)」 Xに入るのは満年数のY、満月数のM、満日数のD、 一年未満の月数YM、一年未満の日数YD、 一月未満の日数MDの6種類です。 宜しくです。
お礼
こんにちは。 &で繋げればセルを分けなくてもいいんですね。 エクセル習ったことないので、すぐに理解できなくてごめんなさい。 参考になりました。
補足
回答ありがとうございます。 この方法は、年月日をそれぞれ違うセルに分けなければできないということですか?
お礼
何度も考えていただきありがとうございます。 日付関係の問題はエクセルの計算じゃなくても難しいです。 今回は上司に「在籍期間を出して」とだけ言われて作り始めました。 エクセルの知識が全くと言っていいほど無いのに、人数が多かったので計算でできたらいいなぁというちょっとした気持ちで投稿してしまい、質問も的確ではなかったようで申し訳ありませんでした。