- ベストアンサー
エクセルの計算式
次のような場合の計算式を教えて下さい。 日数の計算です。 1、2011/03/15~2011/5/10 ※ここの1ヶ月と25日に計算式はわかります。 但し次のような場合 2,2011/06/20~2012/09/10 ※ここの1年の計算式は分かりますが、月数が14ヶ月となります。これを1年2ヶ月21日と計算する計算式を教えて下さい。 また、 1,2ヶ月15日 2,3ヶ月10日 3,1年2ヶ月21日 の期間があった場合 これを合計して 1年8ヶ月26日 と上記期間毎とそれを合計した合計期間を計算する方法を教えて下さい。 よろしくお願いします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
翌日起算で計算する一例。複雑でだいぶ難しいですが、一応、下の数式で計算できます。なおバグを含むとされている DATEDIF 関数の使用は避けてみました。 A2 2012/2/2 B2 2014/2/1 C2 =b2-a2 D2 =int(c2/365)-(date(year(b2),month(a2),day(a2))>b2) E2 =mod(month(b2)+12*(month(a2)>month(b2))-month(a2)-(day(a2)>day(b2)),12) F2 =b2-date(year(b2),month(b2)-(day(a2)>day(b2)),day(a2)) G2 =d2&" 年 "&e2&" か月 "&f2&" 日" A4 合計 C4 =sum(c2:c3) D4 =int(c4/365.25) E4 =int((c4-365.25*d4)/(365.25/12)) F4 =round(c4-365.25*d4-365.25/12*e4,)
その他の回答 (6)
- bunjii
- ベストアンサー率43% (3589/8249)
期間の計算は基準が異なると正しい結果を得られません。 >1、2011/03/15~2011/5/10 あなたの計算では「1ヶ月と25日」と言うことですが1ヶ月を30日とすれば3月31日の分が誤差になります。 また、起算日の「2011/03/15」を算入するか否かでも1日の誤差が生じます。 保険契約等の場合は契約日も含んでいますがあなたの見解は如何でしょうか? >2,2011/06/20~2012/09/10 あなたの判定で「1年2ヶ月21日」とされる根拠も提示しなければ正しい計算式は導けません。 暦を基準とする計算と経過日数から換算する方法では手順が異なりますので厳密に提示してください。 尚、Excelでの日時を扱うときは実際の値(シリアル値)と表示が異なることが起こります。 シリアル値の1は年月日の起点である1900年1月1日に置き換えて表示されます。 閏年は2月29日が自動的に含まれます。 これらのことを念頭に質問の内容を見直してください。
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
まずは、要請にお答えします。 >あと1つだけお伺いしたいことがあります。 …… 期間計 1年13ヶ月36日 ↓ よって 2年2ヶ月6日 となるようにします。 ※日数を30日で計算します。(このような日数の算出方法が民法の規定にあるそうです。) 要するに、30 日ごとに繰り上げたいということですね。それは単に、日数を 30 日で割り算して、商と余りを求めるだけですね。12 か月の日数は、30 日/月 x 12 月 = 360 日とすればいいですね。 D4 =INT(C4/(30*12)) E4 =INT((C4-30*12*D4)/30) F4 =C4-30*(12*D4+E4) なお 1 か月の長さはご存じのとおり 28 ~ 31 日まで幅があるわけですから、シート各行の○年△月×日という答えの○、△、×をそれぞれ合計した値と、日数の合計を○年△月×日の形式に直した場合の値は、一般には一致しないはずです。各年・各月の繰り上がりのリズムが一定していないので。 >※日数を30日で計算します。(このような日数の算出方法が民法の規定にあるそうです。) 本当にそれで合っているか、よくよくご確認ください。例えば参考 URL のページなどでは、大の月/小の月によって実日数が変わると述べている民法上の事例もあります。 また、契約期間その他において「30 日」と言うのと「1 か月」と言うのでは、扱いが異なっているはずなので、ご注意ください。「10 月 31 日」から 1 か月だと、翌月の「応当する日」(応当日)が「11 月 31 日」であって存在しない日となるので、「その前日」11 月 30 日をもって期間が満了、といった計算の仕方が 143 条ではされたりしますね。
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
No.4 です。失礼しました。ご指摘のあった 2 点のうち、1 点は数式の誤りです。もう 1 点は誤りではなく、正常な動きです。 >開始日 2012/12/8 終了日 2013/4/4 とするとD3 「年」に-1と表示されます。 失礼しました。誤りなので、次式に差替えをお願いいたします。 D2 =year(b2)-year(a2)-(date(year(b2),month(a2),day(a2))>b2) >開始日 2013/5/6 終了日 2013/6/13 とするとF2 「日」の表示が 1900/1/7 と表示されます。 本当であれば 7 と表示されると思うのですが・・ その現象は、操作の手順によっては Excel が勝手に、D ~ F 列のセルの書式として A ~ B 列(参照元)と同じものを自動的に設定してしまうために起こります。現在、D ~ F 列の書式を確認すると日付関係のものになっていますので、「数値」などの書式に変更すれば、「1900/1/7」が「7」に変化します。なおこの変化は見かけだけの問題であって、セルに記入されている値や数式そのものには、何の変化も起きていません。
補足
本当にありがとうございます。 あと1つだけお伺いしたいことがあります。 次のような条件があります。 期間1 1年2ヶ月10日 期間2 7ヶ月14日 期間3 4ヶ月12日 期間計 1年13ヶ月36日 ↓ よって 2年2ヶ月6日 となるようにします。 ※日数を30日で計算します。(このような日数の算出方法が民法の規定にあるそうです。) そこで、F2の7日とF3の27日を合計すると1ヶ月4日とならなければなりませんが、現在の計算式だと 1ヶ月3日となってしまいます。 そのため G2 0年1ヶ月7日と G3 0年3ヶ月27日 の 合計 G4が 0年5ヶ月3日となっています。 この G4を 0年5ヶ月4日とする方法はないでしょうか? 最初に記載すれば良かったのですが、要領を得ない質問で迷惑をお掛けしますが、よろしくお願いします。
- keithin
- ベストアンサー率66% (5278/7941)
区間の日数では30日は使わずに、合計のとこだけを30日1か月で計算したい混在ルールということですね。(あんまり感心できませんが、そうしたいなら。) >申し訳ございませんが具体的な計算式で教えて下さい。 では、アナタのエクセルに具体的にどこに何を記入してるのかから説明が無いとダメです。 簡単のため >=DATEDIF(B4,B5,"Y")&"年"&DATEDIF(B4,B5,"YM")&"ヶ月"&DATEDIF(B4,B5,"MD")&"日" この数式を =DATEDIF(B4,B5,"Y")*10000+DATEDIF(B4,B5,"YM")*100+DATEDIF(B4,B5,"MD") に変更して、セルの書式設定の表示形式のユーザー定義で 0年00ヶ月00日 と設定しておきます。 これがB6にあります。 また「1年2か月21日」改め「1年02ヶ月21日」がC6にあります。 合計の式は =INT(SUMPRODUCT(INT(B6:C6/10000)*360+MOD(INT(B6:C6/100),100)*30+MOD(B6:C6,100))/360)*10000 +INT(MOD(SUMPRODUCT(INT(B6:C6/10000)*360+MOD(INT(B6:C6/100),100)*30+MOD(B6:C6,100)),360)/30)*100 +MOD(SUMPRODUCT(INT(B6:C6/10000)*360+MOD(INT(B6:C6/100),100)*30+MOD(B6:C6,100)),30) と記入し、同じく0年00ヶ月00日の表示形式を付けておきます。
お礼
大変参考になりました。ありがとうございました。なんとか解決できそうです。
- keithin
- ベストアンサー率66% (5278/7941)
>これを1年2ヶ月21日と計算する計算式 A1からB1の日付で =TEXT(DATEDIF(A1,B1,"y"),"0年;;;")&TEXT(DATEDIF(A1,B1,"ym"),"0ヶ月;;;")&TEXT(DATEDIF(A1,B1,"md"),"0日;;;") といった具合に文字列で計算結果を表示します。 文字列で結果を出す方式にしとかないと、たとえば 2013/6/20から 2013/9/19まで みたいな計算ができません。 ここから派生する問題として、説明されていませんが後半のご質問は「30日で1か月とする」という前提を置いて計算したいという事でしょうか。(上述の回答は、こちらで例示した6/20~9/19のようにそういう前提ではありません) それならそれで、区間の日数を「日単位」ですべて計算(=B1-A1、あるいは2か月×30+15日)し、合計日数を改めて30日・12か月×30日で繰り上げていく(MOD関数を使う)ようなのも方法の一つになります。 また別のアプローチとしては、 A1,B1に日付、C1に2か月15日 A2,B2に日付、C2に3か月10日 A3,B3に日付、C3に1年2か月21日 としたときに、前述の数式を使い「SUM(A1:A3)からSUM(B1:B3)まで」で計算するという方法もあります。
補足
できましたら追加して計算式をお願いします。 ご指摘の通り「30日で1か月とする」で計算しています。(質問の要領が悪く申し訳ありません。) =DATEDIF(B4,B5,"Y")&"年"&DATEDIF(B4,B5,"YM")&"ヶ月"&DATEDIF(B4,B5,"MD")&"日" この計算式で、 1,2012/3/15から2012/5/10 を0年1ヶ月25日 2,2012/6/20から2013/9/10 を1年2ヶ月21日 以上で項目別に期間が計算できた後 0年1ヶ月25日 + 1年2ヶ月21日 のように足して 「1年4ヶ月16日」 と計算結果として表示できる計算式を教えて下さい。 見よう見まねでやっているので、申し訳ございませんが具体的な計算式で教えて下さい。 よろしくお願いします。
- ohinasama144
- ベストアンサー率33% (108/320)
DATEDIF関数 を使えば出来ると思います。 http://kokoro.kir.jp/excel/datedif.html
補足
大変ありがとうございます。 少しエラーがあるので教えて下さい。 開始日 2013/5/6 終了日 2013/6/13 とすると F2 「日」の表示が 1900/1/7 と表示されます。 本当であれば 7 と表示されると思うのですが・・ これは F3も部分も同じです。(下記 開始・終了日を入力 1900/1/27と表示されます。) それと 開始日 2012/12/8 終了日 2013/4/4 とすると D3 「年」に-1と表示されます。 1年は経過していないので、0年3ヶ月27日 と表示でいないでしょうか? 以上 2点 ご教授いただければ大変助かります。 大変わかりやすのでこの方法を使いたいのでよろしくお願いいたします。