• 締切済み

エクセルで、複数年にまたがる期間を、年ごとに日数計算できないかと思って

エクセルで、複数年にまたがる期間を、年ごとに日数計算できないかと思っています。 例:平成20年3月1日~平成21年5月10日を (1)平成20年3月1日~平成20年12月31日=○○日 (2)平成21年1月1日~平成21年5月10日=○○日 といった感じで、年ごとに自動的に分けて計算できる方法を探しています。(期間については、2~3年にまたがることもあります。) どなたか良い方法を教えていただけませんか?

みんなの回答

  • soixante
  • ベストアンサー率32% (401/1246)
回答No.4

#1の者です。 >Stday = Cells(1, 1).Value、Edday = Cells(1, 2).Valueの部分を変えればいいのでしょうか? はい。Stday はスタート日、Edday はエンド日としています。 他の部分もそれにあわせて変える必要はありますが、Cells というのは、R1C1形式ですので、丁寧に見ていただければ分かると思います。 念のため、簡単な解説コメントを足したコードを以下に記します。 #1の回答の代わりに以下を貼っても構いません。 VBAでは、文頭に’がついている文は解説文として色が変わりますのでコードには影響が出ません。 --------------------------------------------------------------------- Sub 日数計算() '変数宣言 Dim r As Integer, c As Integer, p As Integer Dim Stday As Date, Edday As Date On Error GoTo ErrShori '開始日、終了日のセット Stday = Cells(1, 1).Value Edday = Cells(1, 2).Value '前回分の内容を消す Range(Cells(2, 1), Cells(Rows.Count, 3)).ClearContents Cells(1, 3).ClearContents '開始日、終了日の関係によって場合分け処理 '開始日より終了日のほうが古い場合、エラーメッセージを出して終了 If Stday > Edday Then MsgBox "開始日と終了日の設定が間違っています。" Exit Sub '開始日と終了日が同じ場合 ElseIf Stday = Edday Then Range(Cells(2, 1), Cells(2, 2)).Value = Stday Cells(2, 3).Value = 0 '開始日と終了日が同じ年の場合 ElseIf Year(Stday) = Year(Edday) Then Cells(2, 1).Value = Stday Cells(2, 2).Value = Edday Cells(2, 3).Value = Cells(2, 2).Value - Cells(2, 1).Value + 1 '開始日と終了日が年が異なる場合 Else p = Year(Edday) - Year(Stday) + 1 Cells(2, 1).Value = Stday Cells(2, 2).Value = DateSerial(Year(Stday), 12, 31) Cells(2, 3).Value = Cells(2, 2).Value - Cells(2, 1).Value + 1 For r = 2 To p Cells(r + 1, 1).Value = DateSerial(Year(Stday) + r - 1, 1, 1) Cells(r + 1, 2).Value = DateSerial(Year(Stday) + r - 1, 12, 31) Cells(r + 1, 3).Value = Cells(r + 1, 2) - Cells(r + 1, 1) + 1 Next r Cells(p + 1, 2).Value = Edday Cells(p + 1, 3).Value = Cells(p + 1, 2) - Cells(p + 1, 1) End If 'A列、B列、C列の書式設定 Range(Columns(1), Columns(2)).NumberFormatLocal = "ggge年m月d日" Columns(3).NumberFormatLocal = "0" '経過日数の合計 With Cells(1, 3) .Value = Application.WorksheetFunction.Sum(Range(Cells(2, 3), Cells(Rows.Count, 3))) .NumberFormatLocal = "#,###" End With Exit Sub 'エラー(開始日・処理日に文字などを入力されたなど)発生時は終了させる ErrShori: MsgBox "エラーのため終了します" End Sub

jyango1
質問者

お礼

説明込みでわかりやすいです。ありがとうございます。 試してみます。

全文を見る
すると、全ての回答が全文表示されます。
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

回答No2です。B2セルへの入力の式は次の式に訂正してください。 =IF(A2="","",IF(AND(ROW(A1)=1,A3=""),$B$1-$A$1+1,IF(AND(ROW(A1)=1,A3<>""),A2-$A$1+1,IF(A3<>"",A2-DATE(YEAR(A2),1,1)+1,$B$1-DATE(YEAR(A2),1,1)+1))))

全文を見る
すると、全ての回答が全文表示されます。
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

A1セルに平成18年3月1日と入力し、B1セルに平成21年5月10日と入力するとします。 そこで、A2セルから下方にはその期間内に入る年号を表示させることにするのですがそのためには次のようにします。 A2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(COUNT($A$1:$B$1)<>2,"",IF(YEAR($B$1)>=YEAR(DATE(YEAR($A$1)+ROW(A1)-1,12,31)),DATE(YEAR($A$1)+ROW(A1)-1,12,31),"")) A2セルから下の行を平成18年というように表示させるためにはA2セルから下の行を範囲として選択したのちに右クリックして「セルの書式設定」から「表示形式」タブの「ユーザー定義」で種類の窓には ggge"年" と入力します。 そこでそれぞれの年における日数ですがB列に表示させることにしてB2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",IF(AND(ROW(A1)=1,A3=""),$B$1-$A$1+1,IF(AND(ROW(A1)=1,A3<>""),A2-$A$1+1,IF(A3<>"",A2-DATE(YEAR(A2),1,1),$B$1-DATE(YEAR(A2),1,1)+1))))

jyango1
質問者

お礼

回答、ありがとうございます。 来週、職場に行って試してみます。

全文を見る
すると、全ての回答が全文表示されます。
  • soixante
  • ベストアンサー率32% (401/1246)
回答No.1

私なら、年数がまちまちになるのなら、マクロを使ってみます。 マクロはお使いになれますか? 念のためご存じないことを想定して以下に記します。 セッティング 【1】新規シート上で、Alt+ F11 (VBA画面があきます) 【2】Alt + I 、M (真っ白な画面が開きます) 【3】以下の点線から点線までをコピーし、その真っ白画面に貼る。 '--------------------------------------------------------------------- Sub 日数計算() Dim r As Integer, c As Integer, p As Integer Dim Stday As Date, Edday As Date On Error GoTo ErrShori Stday = Cells(1, 1).Value Edday = Cells(1, 2).Value Range(Cells(2, 1), Cells(Rows.Count, 3)).ClearContents Cells(1, 3).ClearContents If Stday > Edday Then    MsgBox "開始日と終了日の設定が間違っています。"  Exit Sub ElseIf Stday = Edday Then  Range(Cells(2, 1), Cells(2, 2)).Value = Stday  Cells(2, 3).Value = 0 ElseIf Year(Stday) = Year(Edday) Then  Cells(2, 1).Value = Stday  Cells(2, 2).Value = Edday  Cells(2, 3).Value = Cells(2, 2).Value - Cells(2, 1).Value + 1 Else  p = Year(Edday) - Year(Stday) + 1  Cells(2, 1).Value = Stday  Cells(2, 2).Value = DateSerial(Year(Stday), 12, 31)   Cells(2, 3).Value = Cells(2, 2).Value - Cells(2, 1).Value + 1  For r = 2 To p    Cells(r + 1, 1).Value = DateSerial(Year(Stday) + r - 1, 1, 1)   Cells(r + 1, 2).Value = DateSerial(Year(Stday) + r - 1, 12, 31)   Cells(r + 1, 3).Value = Cells(r + 1, 2) - Cells(r + 1, 1) + 1  Next r  Cells(p + 1, 2).Value = Edday  Cells(p + 1, 3).Value = Cells(p + 1, 2) - Cells(p + 1, 1) End If Range(Columns(1), Columns(2)).NumberFormatLocal = "ggge年m月d日" Columns(3).NumberFormatLocal = "0" With Cells(1, 3)  .Value = Application.WorksheetFunction.Sum(Range(Cells(2, 3), Cells(Rows.Count, 3)))  .NumberFormatLocal = "#,###" End With Exit Sub ErrShori: MsgBox "エラーのため終了します" End Sub '--------------------------------------------------------------------- 【4】Microsoft Visual Basic 画面を閉じて、エクセルに戻る。 セッティングは以上で終わり。 使用方法 【1】A1セルに、開始日を入力 例えば 2008/3/1 と入れる 【2】B1セルに、終了日を入力 例えば 2009/5/10 と入れる 【3】Alt + F8 を押す 【4】日数計算  を選択して、実行。「日数計算」をダブルクリックでも可。 試しに、A1セルに、ご自分の誕生日を、B1セルに、本日を入力した上で、実行してみてください

jyango1
質問者

お礼

回答、ありがとうございます。 VBAはほとんど知識がありません。 実際に使う場合、日付を入力する予定のセル場所はRICI形式でStday = Cells(1, 1).Value Edday = Cells(1, 2).Valueの部分を変えればいいのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルの日数計算について

    エクセル初心者です。 日数を求める計算式を教えてください。年とかではなく、○○日という計算です。 例えば、 平成10年2月1日 平成21年5月5日 という2つの日数を求めるのですが、求めるときに H11・12・31以前 ○○日 H12・1・1~H13・12・31 ○○日 H14・1・1~H18・12・31 ○○日 H19・1・1~H19・12・31 ○○日 H20・1・1~H20・12・31 ○○日 H21・1・1~          ○○日 と上記の期間をそれぞれ求める式を教えてください。 よろしくお願いします

  • エクセルで作業期間の日数を計算したい

    エクセルについて質問です。 セルA1に開始日(例:2012/2/20) セルC1に終了日(例:2012/5/12)を入力し、この期間の日数(○○日間)を 計算する方法を教えて下さい。 更にこの期間で、「土日祝日を除いた日数(平日のみの日数)」と 「日曜祝日を除いた日数(平日+祝日でない土曜日の日数)」を算出する方法も教えて下さい。 ちなみに作業日数を計算するのに、DAYS360関数を使ってみましたが、 1年を360日として計算するので、正確な日数になりません。 また、曜日や休日が絡むとどんな関数を使えば良いのか全くわかりません。 よろしくお願いいたします。

  • 日数計算ソフト

    例)平成11年9月1日から平成16年8月3日まで日数は何日間か、、、のように計算できるフリーソフトもしくはエクセルの計算式などご存知の方はいらっしゃいませんか?

  • エクセルで日数計算

    エクセル2003で、 A1に「5月10日」 B1に「8月3日」 と入力したとして C1に5月10日~8月3日までの日数(両端入れ) で自動的に計算してくれる関数ってありますか? よろしくお願いします。

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

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

  • エクセルで期間から期間を足したり引いたりする方法を教えてください

    期間から期間を引く計算方法を教えてください ○年○ヵ月○日から○年○ヵ月○日を引いて○年○ヵ月○日を表示する方法を教えてください。 たとえば、勤続年数が31年6ヵ月15日(A1)で休職期間が1年8ヶ月21日(A2)あった場合、実際に勤務についていた日数を祭日に関係なく、○年○ヵ月○日(A3)と表示させたい。 入社日  昭和52年9月16日 退社日  平成21年3月31日 在籍期間  31年6ヵ月15日 休職開始日 平成18年1月8日 休職終了日 平成19年9月29日 休職期間   1年8ヶ月21日 期間計算の方法はEXCELのDATEDIF関数で出してます。 期間同士を足したり引いたりする方法を教えてください。

  • 日数計算について

    たとえば平成11年5月31日~15年6月31日までとあるとします。その間の日数を計算したいのですが簡単な求め方を教えてください。お願いします!

  • エクセル 平日の日数

    エクセルで、年月を入力するだけで その入力された月の平日の日数(土日・祝日を除いた日数)が 自動に入力される方法ってありますか? つまりA2に『平成21年1月』と入力すると    A3に『20』と出てくる と、いう感じ。 さらに、年と月を違うセルに入力(年は年度もあり)した時はどうでしょうか? つまりA1に『平成20年度』    A2に『1月』    と入力すると    A3に『20』と出てくる。 と、いう感じです。 もしおわかりの方がいらっしゃいましたらぜひ教えてください。

  • 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日で計算します。 よろしくご指導お願いします。

  • EXCELの日数計算

    各セルごとに平成 23 年 12 月 20 日 から 平成 23 年 12 月 25 日と15のセルに入力されたシートですがこれの日数を出すのはどうしたらいいでしょうか 教えてください。EXCEL2007を使用しています。