プロが教えるわが家の防犯対策術!

こんにちは。今、お仕事でこのようなことに直面しております。使用しているものはExcel2000です。

   A B
1 予定6月8日   ←入力されている情報
2 確定6月18日  ←入力されている情報
3 遅延日数10日    ←セルB3 の結果を自動計算して出力出来るか?

という問題です。
例題のようにたかだか10日くらいのものでしたら問題ないですが、下記のような可能性があるため、考慮しなくてはならない事柄があります。

●西暦表示はさせずに ○月×日 としたいが、年月をまたがる計算も有り得ること。
 (EX: B1セル→2004年12月25日 B2セル→2005年4月8日)
●セルB3の回答が32日以上の場合は ○ヶ月×日 というように出力したい。


書式が数値ではなく日付なのだから計算なんて出来るのかな?なんて思いつつデータの量が1sheetに6000件あります。さすがに自動計算させたくて…。
お手すきのお方、いらっしゃいましたら宜しくご教授くださいませ。

A 回答 (6件)

他の方の回答されていますが、


別案で、

B3には"=IF(B2-B1>31,INT((B2-B1)/31)& "ヶ月" & MOD(B2-B1,31) & "日",B2-B1 & "日")"を埋める。

実は、他の方と値が異なります。
年を越える例の場合、日数は104日になります。
dateifを使うと、3ヶ月14日になりますが、
上記の計算式では、3ヶ月11日です。
(1ヶ月を30とするか?の違いかと思われます)

どちらの値を期待されているのか次第ですが・・・
    • good
    • 0
この回答へのお礼

早速のご回答、有難うございました。これもOKです!
ただおっしゃっていた通り、一ヶ月を30日とするか31日とするかで異なりますよね。
相談出来る上司が本日は退社しましたので、この部分は来週早々に相談して決定します。
#でも。。。一般的には30日でカウントするものなのかな?それとも31日?

お礼日時:2004/09/10 16:12

#3です。

先ほどの回答で27と記載しましたが28日です。

予定を6/8、確定には3/25で計算した結果が”9Kヶ月20日”とありますが、9ヶ月17日又は9ヶ月11日では有りませんか?

この場合は、日数は290日になりますので、1ヶ月を31日換算すれば、9ヶ月と残りの日付が11日になります。
但し、DateIFを用いると、6月から3月までの各月の末日が31日になっていない日を数えると6日になり、dateIFでは+6日の17日になります。

もっと分かりやすい例では、
12/25から3/25にした場合、日数は90日になり、1ヶ月31日換算すると2ヶ月と28日になります。
DATEIFでは、2月で28日なので、3ヶ月0日になります。

これで通じるかな?
    • good
    • 0
この回答へのお礼

おはようございます。昨日に引き続き、有難うございました。
そして、おっしゃる通りで9ヶ月20日というのは私の間違えでした^^; 実はわが社ではネットの使用が禁止されているんですが、どうしても今回はご教授戴きたかったのでひっそり見つからないようにこちらのPAGEにアクセスしてました(笑)
それとずっと研修続きで仕事も溜まっていて気持ち的にも焦っていて、その結果、ミスをしたんだと思います(汗)

お礼日時:2004/09/11 06:30

#3です。



30日と書きましたが、誤りです。
DATEIFでは、2ヶ月目は、27日で3ヶ月目になります。

提示の例では2005/3/25で差異が発生します。
    • good
    • 0
この回答へのお礼

度々恐縮です。今、みなさんから頂いたデータをいじっているのですが少しずつ、どうしよう…とか、あれ?というような部分が出てきていたり…。私の入力ミスという事も多分に考えられますが^^;

で、ご提示頂きました件を今、実証してみました。
予定を 6/8 と入力(中身は2004/06/08)、確定には 3/25(中身は2005/3/25) としたところの計算結果は9Kヶ月20日となりました。。。

ぅーん。何故?というかこれは先程のご説明とおり、仕方の無いこと?というか仕様なのですか?(そんなわけ無い…?かな?)

お礼日時:2004/09/10 16:24

#2のmshr1962です。


一つだけ訂正します。
B1>B2の状態だとエラーします。
(B2が未入力や年度、月の入れ間違いで大小が逆の場合)

=IF(B1>B2,"",IF(B2-B1>31,DATEDIF(B1,B2,"m")&"ヶ月"&DATEDIF(B1,B2,"md"),B2-B1)&"日")
としてください。
    • good
    • 0
この回答へのお礼

早速、またまたのご親切なアドバイス、有難うございました。そして私は全く、このような事態も有り得ることを想定した式を考えようともしておりませんでした。有難うございます!めちゃくちゃ助かりました。またこれで一つ、お勉強になった^^;(もっと知識をつけなきゃ!って感じですよね(恥))

お礼日時:2004/09/10 16:08

日付形式なら


=B2-B1
で出ませんか?最後に表示形式を変えればOK

>セルB3の回答が32日以上の場合は ○ヶ月×日 というように出力したい。
なら
=IF(B2-B1>31,DATEDIF(B1,B2,"m")&"ヶ月"&DATEDIF(B1,B2,"md"),B2-B1)&"日"
ただし文字になるのでこのセルを計算には使えません。
    • good
    • 0
この回答へのお礼

早速のご回答、有難うございました。単純に =B2-B1 で実行してみたのですが残念な結果でした。。。。
それと別の式を記載してみましたが、これならOKでした。有難うございました!!

お礼日時:2004/09/10 16:04

DATEDIF関数を使って下さい。

この関数は関数ウィザード
からは指定できませんのでセルに直接入力して下さい。

=IF(DATEDIF(B1,B2,"M"),DATEDIF(B1,B2,"M")&
"ヶ月","")&DATEDIF(B1,B2,"MD")&"日"

もちろん文字列であって シリアル値ではありません。
    • good
    • 0
この回答へのお礼

こんにちは。早速のご回答、有難うございました。
今、ご教授いただきましたとおりに作業をしましたらOKでした。有難うございました!
(それにしても…知識の無さにもっと頑張らないと。。。と常々感じました^^;)

お礼日時:2004/09/10 15:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!