• 締切済み

次の計算を教えて下さい

エクセルで日数計算をする方法を教えて下さい。 計算結果で        月          日 A1   8ヶ月    B1    9日 A2   3ヶ月    B2   25日 A3   6ヶ月    B3   10日 A4 1年5ヶ月     1ヶ月14日 合計                   ※日の計算は、28・29・30・31日ありますが30日で計算します。 と合計の結果が出た場合 A5 1年6ヶ月14日 ← 1年5ヶ月+1ヶ月14日=1年6ヶ月14日 このように 「1年6ヶ月14日」と計算ができる式を教えて下さい。 よろしくお願いします。

みんなの回答

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.9

#8です > 計算結果で 見落としてました。 "ヶ月" や "日" は書式で付加していたものになりますか。 であれば、#8の     sS = StrConv(r.Value, vbNarrow) ↓     sS = StrConv(r.Text, vbNarrow) として、書式を含めた文字列を扱うように変更すれば動くと思います。 なお、後半の     iAry(j, 0) = iAry(j, 0) - iAry(j, 1) * v(2) 部分は     iAry(j, 0) = iAry(j, 0) Mod v(2) でも同じです。 ※※ この関数の動きは不完全なようです。  というのは、#8にて > A5に、=CalcDay(A4:B4) もしくは =CalcDay(A1:B3) と記述していましたが、A1:B3 のどれかを変更した際、  =CalcDay(A4:B4) の方は表示が更新されませんね(2007 にて) 使いものにならないかも・・・ 失礼しました。

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.8

関数を作成した方が処理しやすかと思います。 各入力されているのは文字列だとして、また、1ヶ月は30日固定解釈だとして A4に、=CalcDay(A1:A3) B4に、=CalcDay(B1:B3) A5に、=CalcDay(A4:B4) もしくは =CalcDay(A1:B3) とすると、見た目できたような気がすると思います。 以下記述を標準モジュールに転記します。 Public Function CalcDay(rng As Range) As String   Dim r As Range   Dim iAry() As Long   Dim vAry As Variant   Dim sS As String   Dim v As Variant   Dim i As Long, j As Long, k As Long   vAry = Array( _         Array("日", 1, 30, "日"), _         Array("月", 2, 12, "ヶ月"), _         Array("年", 3, 10000, "年") _       )   If (rng.Count < 2) Then Exit Function   ReDim iAry(3, rng.Count - 1)   ' 数字 → 数値解釈部分   k = 0   For Each r In rng     sS = StrConv(r.Value, vbNarrow)     For i = UBound(vAry) To 0 Step -1       If (Len(sS) = 0) Then Exit For       v = vAry(i)       j = InStr(sS, v(0))       If (j > 0) Then         iAry(v(1), k) = Val(sS)         sS = Mid(sS, j + 1)       End If     Next     k = k + 1   Next   ' 日、月、年 計算部分   CalcDay = ""   For Each v In vAry     j = v(1)     For i = 1 To UBound(iAry, 2)       iAry(j, 0) = iAry(j, 0) + iAry(j, i)     Next     iAry(j, 0) = iAry(j, 0) + iAry(j - 1, 1)     iAry(j, 1) = iAry(j, 0) \ v(2)     iAry(j, 0) = iAry(j, 0) - iAry(j, 1) * v(2)     If (iAry(j, 0) > 0) Then       CalcDay = iAry(j, 0) & v(3) & CalcDay     End If   Next '  CalcDay = StrConv(CalcDay, vbWide) ' 数字を全角にするならコメントを外す End Function ※ ソコソコ動くと思いますが、不都合あれば修正してください。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.7

No.2です。 補足の >文字列ではないのですが >A1 01年1ヶ月15日 >A2 00年1ヶ月20日 について確認したいのですが・・・ セルの表示形式はどのようになっていて、入力方法はどのようにしているのか? それによってやり方が変わってきます。 憶測で回答しても無意味になるような気がしますので、 今一度確認したうえで考えてみたいと思います。 というコトで具体的な回答ができなくてごめんなさいね。m(_ _)m

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.6

度々申し訳ありません。 解答No5の画像が範囲を間違えていました。 再度差し替えです。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.5

解答No.4の貼付画像を間違えましたので訂正します。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.4

>もう一つの方法も検討しています。 解答No.2への補足で以下の条件を追加提示されましたので状況が理解できました。 A列の値はシリアル値で表示形式をユーザー定義でyy"年"m"ヶ月"d"日"になっていると推測します。 A列はシリアル値なのでそのままSUM関数または四則演算で加算できます。 但し、1900年1月1日を起算とした経過日数となるため1ヶ月を30日、1年を12ヶ月とする値と差が生じます。 従って、あなたの基準で日数を加算するには各シリアル値を日数に変換して加算しなければなりません。 また、合計日数を表示形式でnn年mヶ月d日の表示にすると此処でも誤差が生じますのであなたの基準で年数、月数、日数の置き換える必要があります。 01年1ヶ月15日=405日 00年1ヶ月20日=50日 --------------------- 合計         455日 シリアル値の場合は以下の通りになります。 01年1ヶ月15日=381日(1901/1/15) 00年1ヶ月20日=20日(1900/1/20) --------------------- 合計         401日(1901/2/4) 貼付画像の説明 A1セルにはDATE関数で =DATE(1,1,15) としてシリアル値に変換しました。 B1セルはA1セルの値を表示形式「標準」にしたものです。 C1セルはA1セルから1年を12ヶ月、1ヶ月を30日として日数を算出しました。 D1~F1セルはC1セルの日数から年数、月数、日数を算出しました C3セルはC1:C2の合計です。 A4セルにはDATE関数でD3,E3,F3を引数にしてシリアル値に変更しました。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.3

貼付画像のような計算表にすると良いでしょう。 質問の表はA1:B3に文字列で入力されていると仮定しました。 C列にはA列の月数×30+B列の日数としました。 C4はC1:C3の合計です。 A4にC4の合計日数から1年6ヶ月14日となる式を入力しました。 C1=LEFT(A1,FIND("ヶ",A1)-1)*30+LEFT(B1,FIND("日",B1)-1) C4=SUM(C1:C3) A4=INT(C4/30/12)&"年"&MOD(INT(C4/30),12)&"ヶ月"&MOD(C4,30)&"日"

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! A1~B3セルは文字列になっているのでしょうか? そうであれば数値に直すため、数式そのものがかなり長くなってしまいますので、 一案です。 A1~A3セルの表示形式はユーザー定義から 0"ヶ""月" としておいて数値のみの入力とします。 同様にB1~B3セルの表示形式はユーザー定義から 0"日" とし、こちらも数値のみの入力 もしDATEDIF関数を使用しているのであれば =DATEDIF(開始日,終了日,"M") のように数値のみの表示 そうしたうえで A4セルに =INT(SUM(A1:A3)/12)&"年"&MOD(SUM(A1:A3),12)&"ヶ月" B4セルに =INT(SUM(B1:B3)/30)&"ヶ月"&MOD(SUM(B1:B3),30)&"日" A5セルに =INT((SUM(A1:A3)*30+SUM(B1:B3))/360)&"年"&INT(MOD(SUM(A1:A3)*30+SUM(B1:B3),360)/30)&"ヶ月"&MOD(MOD(SUM(A1:A3)*30+SUM(B1:B3),360),30)&"日" という数式を入れると、↓の画像のような感じになります。 ※ 画像の黄色いセルは文字列になりますので、 計算には使用できません。m(_ _)m

mz-youg
質問者

補足

ありがとうございます。 もう一つの方法も検討しています。 文字列ではないのですが A1 01年1ヶ月15日 A2 00年1ヶ月20日 A3 01年3ヶ月5日(A1とA2の合計) という日数を入力して A3の部分に1年1ヶ月10日+00年1ヶ月20日+00年1ヶ月20 として 01年3ヶ月5日とする計算式があればと思っています。 日にちは28・29・30・31日がありますが、30日を基準に たとえば45日の場合は1ヶ月15日と算出します。 以上のような計算ができないか考えています。 よろしくお願いします。

  • shintaro-2
  • ベストアンサー率36% (2266/6244)
回答No.1

月については、 a1:a3の合計がa4に17ヶ月とあるとすると 日にちについては b1:b3の合計がb4に44日とあるとすると =int((a4+int(b4/30))/12)&"年"&(a4-12*int(a4+int(b4/30))/12)&"ヶ月"&(b4-30*int(b4/30))&"日" といったところでは?

関連するQ&A

  • Excel 日数計算について

    Excelの日数計算について質問です。 H18.9.20(A2)からH19.2.22(B2)の期間を月数と残りの日数で表示すると =DATEDIF(A2,B2,"M")&"月" =DATEDIF(A2,B2,"MD")&"日" ここまでは何とかできましたが、 上記期間の1/2、及び1/3の月数と残日数を整数(端数は切捨て)で表示するにはどのような式が必要でしょうか? 月数は=DATEDIF(A2,B2,"M")で求めた月を1ヶ月30日で計算します。 よろしくご指導お願いします。

  • エクセルの計算式

    次のような場合の計算式を教えて下さい。 日数の計算です。 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日 と上記期間毎とそれを合計した合計期間を計算する方法を教えて下さい。 よろしくお願いします。

  • excelで合計日数の出し方を教えて下さい。

    はじめまして、 今まではdatedifを使って日数を求めることができました。 この場合 例、セルa1に開始日とb1終了日を入れればc1に合計日数が計算されました。 そこで新たにセルごとに年、月、日を入力して同じように合計日数が計算されるようにしたいのです。 例、セルa1に年(2009)、a2に月(3)、a3に日(6)=開始日   セルb1に年(2009)、b2に月(4)、b3に日(28)=終了日   セルc1に合計日数が計算(54)日数 となるように作りたいのですがどなたか教えて下さい。 宜しくお願いします。

  • エクセル 計算式について

    エクセルの計算式の質問です。(初歩的ですみません) 例えば 1月 15.000     2月 10.000     合計 25.000   とあって、1月をセルA1、2月をA2、合計をA3とした時に 1月と合計がわかっているので2月の所に「=A3-A1」といれています。3月が増えたときにも合計がわかっているので3月をA3とし、合計をA4として式を作ると「=A4-A1-A2」とするとA3がでると思うのですが 始めの時点でA2に式が入っているからか、うまく計算できません。 A2を値として認識させるとか、他にいい計算方法はありませんか? 

  • エクセル 繰り返し計算

    エクセルで毎月同じ計算をさせるときの方法を教えてください。 シートとしては、入力用、計算用、出力用とします。 入力用シートにA2セルに1月のデータ、B2セルに2月のデータ、C2・・・と12月まであります。 計算用シートのA2に入力されれば、G2、G3、G4のセルに計算結果が出ます。 出力用シートのA2、A3、A4に1月の結果、B2、B3、B4に2月の結果、・・ というように演算させたいのですが計算用シートの引用式、出力用シートの引用式は どの様に作成すればいいのでしょうか? 宜しくお願いします。

  • 日数を求める計算方法について

    日数を求める計算方法について A1:開始日入力、B1:終了日を入力しました。 単純にB1-A1にした結果の日数が開始日か終了日のどちらかが含まれず1日少ない日数です。 やり方が違うのでしょうかカウントの基本も合わせて教えて下さい。 開始日も終了日も両方カウントされるものだと理解してます。これ違いますか? 年/月/日で表示させています。

  • 3ヵ月後の日付を自動計算しようと思っているのですが、上手くいかなかった

    3ヵ月後の日付を自動計算しようと思っているのですが、上手くいかなかったのでご質問させていただきます。 3ヵ月後の日付をエクセルで自動的に計算させようと思って、いろいろ試行錯誤しているのですが、上手くいかなかったので、ここに質問させていただきました。よろしくお願いいたします。 で、単純に3ヵ月後を計算させようと思い、ExcelのWorkday関数等を利用して、以下のような式を考えました。 =WORKDAY(DATE(YEAR(A1),MONTH(A1)+3,DAY(A1)-1),1,B1:B38) ここで、セルA1には基準日を入力し、セルB1からB38には国民の祝日を入力しています。 で、これでほとんどの場合で上手くいったんですが、例えば明日8月31日を基準日とした場合、3ヵ月後を、基準日が月末なので3ヵ月後も月末で揃える格好で日付を指定したいと考えており、エクセル関数の組み合わせでとまってしまいました。 つまり8月31日を基準日としたような場合は、求める日付として11月30日(11月30日が土日や祝日の場合は、更にさかのぼって11月29日だったり、11月28日が求める日付)となるようにしたいと考えております。 どなたか、お知恵を拝借できればと思っております。よろしくお願いいたします。

  • excel の計算式にて…

    Excel 2003の計算式について教えてください。 合計 A-B-C 1日 A1-B1=C1  2日 A2-B2=C2 3日 A3-B3=C3   ……… 31日 A31-B31=C31 ちなみに A=目標 B=実績 C=対目標という簡単な計算式です。 A列は月初めに日々違う数字月末まで記入します。 B列は日々業務終了後入力します C列はA-Bの結果なので計算式で自動入力です 合計Aは月の合計でなく、その日までの合計を表示したいのです。 例えばB2に数字を入力すると合計A,B、Cそれぞれ、2日まで。B3だと3日までの累計の数字が自動で表示するように設定したいのです。 日々セルを指定し、計算式を変えると良いのですが、パソコンが苦手な人がいる為困っています。 なにか良い方法はないでしょうか??? わかる方教えてください。

  • エクセルで日数を計算したいんですが、

    エクセルで日数を計算したいんですが、 「月」と「日」を別のセルに入れています。 A1セル=月 B1セル=日 (例) A1セル B1セル 4月     10日 5月     13日 この4月10日から5月13日の間の日数を数えたいのですが セルが分かれていても計算することって可能ですか? 初歩的な質問で恐縮ですが教えて下さい! よろしくお願いします!

  • エクセルで残り日数を計算させる

    エクセルで関数を使用し10/1までの残り日数を表示させたいのですが どのような計算式を作成すれば宜しいでしょうか? A1に4月20日と記入した場合  A列に月日を記入しB列に残り日数を表示させたいです。   A列     B列 3 4月13日   7日 4 5 4月15日   5日     ・    ・     ・    ・  このようになる関数を教えて下さい。

専門家に質問してみよう