「みんな教えて! 選手権!!」開催のお知らせ

どなたかご存知でしたらご教示いただければ幸いです。

一言でうまく説明出来ないので、例を記載させていただきます。
したい事は保有月数を表示させたいのですが、月の途中から保有した場合は一律0.5ヶ月と表示させたいのです。

2008年5月14日~2008年8月26日   の場合は3.5ヶ月
2008年7月4日~2008年8月31日    の場合は1.5ヶ月
2008年7年6日~2008年7月29日     の場合は0.5ヶ月

と、月中からスタートした場合は最初の月を一律0.5ヶ月、逆にendはend日が月中でも月末日でもend日を含む月は0.5ではなく1ヶ月とカウントしたいのです。

お手数をおかけいたしますが、
どうぞ宜しくお願い致します。

A 回答 (12件中1~10件)

ANo.1&5&6&10のjo-zenです。

再度補足します。

B2,C2セルが空白の場合、エラーが返されてしまいますので、それを回避するには、以下の式にしてみてください。


=IF(OR(B2="",C2=""),"",(IF(DAY(B2)=1,DATEDIF(DATE(YEAR(B2),MONTH(B2),1),DATE(YEAR(C2),MONTH(C2)+1,1),"m"),DATEDIF(B2,DATE(YEAR(C2),MONTH(C2)+1,1)-1,"m"))&IF(DAY(B2)=1,".0",".5"))*1)
    • good
    • 0
この回答へのお礼

ありがとうございます!

無事完成しました。
助かりました。きちんと勉強しようと思います。

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

お礼日時:2008/07/29 14:04

[ANo.9この回答へのお礼]に対するコメント、



》 一点質問なのですが・・・

二点質問されているような気がします。

「EOMONTH(開始日、月)」でなく EOMONTH(開始日,月) が正しいですが、その「手持ちの関数の本」の該当する解説は正しいです。


》 (その)説明だけではロジックがわからなくて

なぜ分からないか理解できません。
「月」が 1、2、3、… なら 翌月、翌々月、翌々々月、… であり、-1、-2、-3、… なら 前月、前々月、前々々月、… であること。ならば、0 は翌月と前月の狭間の当月になるという次第。


》 0.5+0.5*(DAY(A1)=1の式の=1というのはどういう意味なのでしょうか?

式は正確にお願いします。正しくは 0.5+0.5*(DAY(A1)=1) です。

[
「式の=1」の部分でOKなんですね。
式 =DAY(A1)=1 は、セル A1 が日付が一日(ツイタチ)のときに TRUE を返します。
セル A1 が 2008/7/1 や 2009/9/1 のとき、式 =DAY(A1) は 1 を返します(だから =DAY(A1)=1 は TRUE になる)が、2008/7/2 や 2010/10/3 のとき 式 =DAY(A1) はそれぞれ 2 や 3 を返します(だから =DAY(A1)=1 は FALSE になる)。
TRUE、FALSE を四則演算(+、-、*、/ の記号を使う計算)ではそれぞれ 1、0 の役目をすることを覚えておいてください。

この位の説明で勘弁してください。(^_^)
    • good
    • 0
この回答へのお礼

>なぜ分からないか理解できません。

。。。すみません。

でも、説明いただいて理解出来ました。
ありがとうございました!

お礼日時:2008/07/29 13:37

ANo.1&5&6のjo-zenです。

補足します。

数値で出したいなら、以下のように式を変形してあげればOKだと思います。

D2セルなどに、

=(IF(DAY(B2)=1,DATEDIF(DATE(YEAR(B2),MONTH(B2),1),DATE(YEAR(C2),MONTH(C2)
+1,1),"m"),DATEDIF(B2,DATE(YEAR(C2),MONTH(C2)+1,1)-1,"m"))&IF(DAY(B2)=1,
".0",".5"))*1

全体に1をかけてあげることにより、文字列を数値に変換するやり方です。

 
    • good
    • 0

=DATEDIF(A1,EOMONTH(B1,0),"m")+0.5+0.5*(DAY(A1)=1)


不具合な開始日あるいは終了日があれば、具体的な年月日をお知らせください。
    • good
    • 0
この回答へのお礼

ありがとうございます、全て正確に出来ました。

一点質問なのですが
手持ちの関数の本でEOMONTHを調べたのですが、

EOMONTH(開始日、月)
開始日から指定した月数だけ前(または後ろ)の最終日に対応するシリアル値を返す。

と説明してあるのですが、教えてくださいましたマクロの(B1,0),"m")部分がそれにあたるのですよね。いまいち本に書かれてある説明だけではロジックがわからなくて・・・
また0.5+0.5*(DAY(A1)=1の式の=1というのはどういう意味なのでしょうか?

質問をしてしまいまして申し訳ございません。
もし可能であればで構いませんが、今後の為に教えていただければ大変嬉しいです。

お礼日時:2008/07/28 17:10

#4です。


=(YEAR(B1)-YEAR(A1))*12+(MONTH(B1)-MONTH(A1))+((DAY(B1)<>1)+(DATE(YEAR(A1),MONTH(A1)+1,0)<>A1)/2)-(DAY(B1)>DAY(A1))

上記で結果は
7月23日9月01日2.5
5月14日8月26日3.5
7月04日8月31日1.5
7月06日7月29日0.5
    • good
    • 0
この回答へのお礼

上記で結果が
2008/6/25~2009/10/15が17.5  (正しくは16.5)
2008/7/15~2010/7/15が25.5   (正しくは24.5)

となってしまいます。。

お礼日時:2008/07/28 15:57

Ano2のものですが、


7/23と9/1で、2.5と計算できていますよ。

この回答への補足

度々申し訳ございません。

先程の日付では大丈夫だったのですが
2008/7/25~2010/7/15等、他の日付だとうまくいきません。
上記期間だと0.5になります。

おわかりになりますでしょうか・・・?

補足日時:2008/07/28 14:44
    • good
    • 0
この回答へのお礼

すみませんでした。

理由はわからないのですが、使用しているPC(エクセル)がたまに故障するのですが、一度閉じて試みるとうまくいく場合が多いので、一度閉じてやってみましたところ、この関数もうまくいきました。

ご迷惑をお掛け致しました。
本当に助かりました。ありがとうございます!

お礼日時:2008/07/28 14:11

ANo.1&5のjo-zenです。



>Start dateが2008/7/23  で End dateが2008/9/1です。

⇒当方のパソコン(Excel)では、2.5ヶ月と表示されますよ。式は、再度貼り付けますが、

 =IF(DAY(B2)=1,DATEDIF(DATE(YEAR(B2),MONTH(B2),1),DATE(YEAR(C2),MONTH(C2)+1,1),"m"),DATEDIF(B2,DATE(YEAR(C2),MONTH(C2)+1,1)-1,"m"))&IF(DAY(B2)=1,".0ヶ月",".5ヶ月")

となります。

この回答への補足

すみません!!

これ、テキスト形式で表示されてしまうのですが、テキスト形式ではなく普通のナンバー表示にするにはどうすれば宜しいでしょうか??

補足日時:2008/07/28 14:37
    • good
    • 0
この回答へのお礼

すみませんでした!

理由はわからないのですが、使用しているPC(エクセル)がたまに故障するのですが、一度閉じて試みるとうまくいく場合が多いので、一度閉じてやってみましたところうまくいきました。

ご迷惑をお掛けしてすみませんでした。
ありがとうございました!!!

お礼日時:2008/07/28 14:10

ANo.1のjo-zenです。



>試してみたのですが、本来2.5ヶ月になる場合は0.5ヶ月となってしまうのですが

⇒どういった日付を入れられたのか教えていただけますでしょうか。よろしくお願いします。
    • good
    • 0
この回答へのお礼

すみません、0.5ではなく2でした。
(他の方の回答を試みた結果と混ざってしまいました。。。すみません)

Start dateが2008/7/23  で End dateが2008/9/1です。

宜しくお願い致します。

お礼日時:2008/07/28 13:43

これでいいのかな?


=(YEAR(B1)-YEAR(A1))*12+(MONTH(B1)-MONTH(A1)+((DAY(B1)>DAY(A1))/2
    • good
    • 0
この回答へのお礼

ありがとうございます。

でも、すみません。。。
2.5と表示されて欲しいところが2と表示されてしまいます。

試した例は2008/7/23~2008/9/1です。


どうぞ宜しくお願い致します。

お礼日時:2008/07/28 14:00

A1  2008年5月14日


B1   2008年8月26日

一例
=IF(OR(A1="",B1=""),"",TEXT(DATEDIF(A1,B1+1,"m")+IF(DAY(A1)=1,0,0.5),"G/標準"))
    • good
    • 0
この回答へのお礼

ありがとうございます。
試してみたのですが、2.5ヶ月と表示したいところが1.5ヶ月と表示されてしまいます。

すみません、またご教示いただけますでしょうか。
どうぞ宜しくお願い致します。

お礼日時:2008/07/28 13:39

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報