• ベストアンサー

エクセル 関数 実日数を月数に直す方法

どなたかご存知でしたらご教示いただければ幸いです。 一言でうまく説明出来ないので、例を記載させていただきます。 したい事は保有月数を表示させたいのですが、月の途中から保有した場合は一律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ヶ月とカウントしたいのです。 お手数をおかけいたしますが、 どうぞ宜しくお願い致します。

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

  • ベストアンサー
  • jo-zen
  • ベストアンサー率42% (848/1995)
回答No.11

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)

515131
質問者

お礼

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

その他の回答 (11)

noname#204879
noname#204879
回答No.12

[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 の役目をすることを覚えておいてください。 この位の説明で勘弁してください。(^_^)

515131
質問者

お礼

>なぜ分からないか理解できません。 。。。すみません。 でも、説明いただいて理解出来ました。 ありがとうございました!

  • jo-zen
  • ベストアンサー率42% (848/1995)
回答No.10

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をかけてあげることにより、文字列を数値に変換するやり方です。  

noname#204879
noname#204879
回答No.9

=DATEDIF(A1,EOMONTH(B1,0),"m")+0.5+0.5*(DAY(A1)=1) 不具合な開始日あるいは終了日があれば、具体的な年月日をお知らせください。

515131
質問者

お礼

ありがとうございます、全て正確に出来ました。 一点質問なのですが 手持ちの関数の本でEOMONTHを調べたのですが、 EOMONTH(開始日、月) 開始日から指定した月数だけ前(または後ろ)の最終日に対応するシリアル値を返す。 と説明してあるのですが、教えてくださいましたマクロの(B1,0),"m")部分がそれにあたるのですよね。いまいち本に書かれてある説明だけではロジックがわからなくて・・・ また0.5+0.5*(DAY(A1)=1の式の=1というのはどういう意味なのでしょうか? 質問をしてしまいまして申し訳ございません。 もし可能であればで構いませんが、今後の為に教えていただければ大変嬉しいです。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.8

#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

515131
質問者

お礼

上記で結果が 2008/6/25~2009/10/15が17.5  (正しくは16.5) 2008/7/15~2010/7/15が25.5   (正しくは24.5) となってしまいます。。

  • dghjty145
  • ベストアンサー率46% (42/90)
回答No.7

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

515131
質問者

お礼

すみませんでした。 理由はわからないのですが、使用しているPC(エクセル)がたまに故障するのですが、一度閉じて試みるとうまくいく場合が多いので、一度閉じてやってみましたところ、この関数もうまくいきました。 ご迷惑をお掛け致しました。 本当に助かりました。ありがとうございます!

515131
質問者

補足

度々申し訳ございません。 先程の日付では大丈夫だったのですが 2008/7/25~2010/7/15等、他の日付だとうまくいきません。 上記期間だと0.5になります。 おわかりになりますでしょうか・・・?

  • jo-zen
  • ベストアンサー率42% (848/1995)
回答No.6

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ヶ月") となります。

515131
質問者

お礼

すみませんでした! 理由はわからないのですが、使用しているPC(エクセル)がたまに故障するのですが、一度閉じて試みるとうまくいく場合が多いので、一度閉じてやってみましたところうまくいきました。 ご迷惑をお掛けしてすみませんでした。 ありがとうございました!!!

515131
質問者

補足

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

  • jo-zen
  • ベストアンサー率42% (848/1995)
回答No.5

ANo.1のjo-zenです。 >試してみたのですが、本来2.5ヶ月になる場合は0.5ヶ月となってしまうのですが ⇒どういった日付を入れられたのか教えていただけますでしょうか。よろしくお願いします。

515131
質問者

お礼

すみません、0.5ではなく2でした。 (他の方の回答を試みた結果と混ざってしまいました。。。すみません) Start dateが2008/7/23  で End dateが2008/9/1です。 宜しくお願い致します。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.4

これでいいのかな? =(YEAR(B1)-YEAR(A1))*12+(MONTH(B1)-MONTH(A1)+((DAY(B1)>DAY(A1))/2

515131
質問者

お礼

ありがとうございます。 でも、すみません。。。 2.5と表示されて欲しいところが2と表示されてしまいます。 試した例は2008/7/23~2008/9/1です。 どうぞ宜しくお願い致します。

  • redowl
  • ベストアンサー率43% (2140/4926)
回答No.3

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/標準"))

515131
質問者

お礼

ありがとうございます。 試してみたのですが、2.5ヶ月と表示したいところが1.5ヶ月と表示されてしまいます。 すみません、またご教示いただけますでしょうか。 どうぞ宜しくお願い致します。

  • dghjty145
  • ベストアンサー率46% (42/90)
回答No.2

データが以下のように、なっていたとします。[開始がA1] 開始        終了      月数 2008年5月14日 2008年8月26日 3.5 2008年7月4日 2008年8月31日 1.5 2008年7月6日 2008年7月29日 0.5 2008年7月1日 2008年7月29日 1.0 1.日付の表示は文字なっていますが、実データは 2008/5/14のように   入力するものとします。 2.月数の列の書式設定の表示形式は、数値で、小数点以下の桁数は1   と設定します。 月数の下のセルC2に以下の計算式をコピーしてから、計算式を下に ドラッグしてコピーします。 =IF(A2*B2=0,"",IF(DAY(A2)=1,MONTH(B2)-MONTH(A2)+1,MONTH(B2)-MONTH(A2)+0.5)) 計算がおかしかったら、連絡をお願いします。

515131
質問者

お礼

ありがとうございます。 試してみたのですが、2.5となるべきところ、1とでてしまいます。 試した日程は start dateが2008/7/23  で  End dateが2008/9/1  です。 どうぞ宜しくお願い致します。

関連するQ&A