行程期間の月毎の日数を出す方法

このQ&Aのポイント
  • 4年分の作業工程表を作成し、期間を入力すると条件付き書式が設定されます。各月のセルに期間の日数を表示したいです。
  • datedif関数を使用して期間を求めることができますが、同じ月の作業工程なら日数を合計する必要があります。また、うるう年の扱いも考慮する必要があります。
  • VBAを使用せずに計算式で計算用のシートを作成する方法を知りたいです。
回答を見る
  • ベストアンサー

行程期間の月毎の日数を出す方法

【状況】 4年分の作業工程表を作成しています。 期間を入力すると作業工程表に黒い色が設定されるように条件付き書式が設定されています。 【やりたいこと】 それぞれの月のセルに期間の日付を表示させたいです。 2024年1月は、1回目の作業の日数16日と2回目の日数の6日を足して21日と表示したい。 3回目の作業は2024年2月15日~3月28日、2月はうるう年なので14日と表示 3月のセルには29日と表示したい。 期間を求めるのは、datedif関数を使用するとよいのだと思いますが、1回目の作業工程と2回目の作業工程が同じ月なら合計しないといけないのとうるう年が絡んでくると何をどうしたらよいのかわからないです。 別シートに計算用のシートを作成しようと思いやってみたのですがうまくいきません。 VBAを使わずに計算式で作成したいと思っております。 ご存じの方がいらっしゃいましたらご教示お願い致します。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答No.2

A6に =MONTH(A10) として右にコピー A7に =IF(MONTH(A10)<>MONTH(B10),DATEDIF(A10,EOMONTH(A10,0),"d")+1,DATEDIF(A10,B10,"d")+1) B7に =IF(MONTH(A10)<>MONTH(B10),DATEDIF(EOMONTH(A10,0),B10,"d"),0) として 各ブロックの開始と終了の列の7行目にコピー A4 に =SUMPRODUCT(($A$6:$L$6=A2)*($A$7:$L$7)) として右にコピー 10行目の日付は表示形式で2015/1/5を1/5にしていると考えています。 2行目と6行目は表示形式で同じ見た目にしてください。 DATEDIFはうるう年を認識しますので利用してます。 > 1回目の作業の日数16日と2回目の日数の6日を足して21日 これは22日と考えています。 添付画像はブロック3までしかデータを入れていません。

その他の回答 (7)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.8

>2024年1月は、1回目の作業の日数16日と2回目の日数の6日を足して21日と表示したい。 との事ですが、1回目の作業期間と2回目の作業期間の間には重複期間が無いのですから、2024年1月中で作業のある日数は21日ではなく、単純に1回目の作業の日数16日と2回目の日数の6日を合計した22日ではないでしょうか。  それと、画像に写っている各セルが何というシート名のシート上のどのセル番号のセルなのかという事や、画像の上に写っている色分けバー表示のセルが何列ほどの列に亘るものなのかといった事が不明ですので、取り合えず下記の仮定に基づいた回答をさせて頂きます。 ・画像の上に写っている色分けバー表示は、Sheet2のB列~NC列にかけての366列に亘って作表されている。 ・画像で「2024年」という西暦年が入力されているセルはSheet2のB2セルを左端とした結合セルに入力されていて、そのずっと右手の方には「2025年」等の別の都市も記入されている。 ・西暦年は「2024/1/1」などの日付をセルの表示形式を使って表示だけを「2024年」に見せかけたもの"ではなく"、表示されているものと同じ「2024年」という単なる文字列データの形で入力されている。 ・画像で色分けバーの上に写っている「1月」などの月名ははSheet2の3行目中の結合セルに「1月」等の文字列データの形で入力されている。 ・画像の下側に写っている表はSheet上に存在している。 ・画像の下に写っている表中で「開始」や「終了」、「日数」などの項目名が入力されているセルの内、左端の「開始」と入力されているセルはSheet1のB3セルであり、同じく最初に「終了」と入力されているセルはSheet1のC3セル、最初に「日数」と入力されているセルはSheet1のD3セルである。 ・画像の下に写っている表中で「1/5」などの日付はSheet1の4行目に入力されていて、シリアル値形式のデーターをセルの書式で日付表示に変換して表示されている。 ・開始日や終了日には年が異なる日付も含まれており、例えば2箇所ある行程「1」の内、左端にある行程の開始日である「1/5」は「2024/1/5」に該当する"シリアル値"のデータ形式で入力されていて、同じく中列の少し右手にある行程「1」の開始日である「1/22」は「2025/1/22」に該当する"シリアル値"のデータ形式で入力されている。 ・それぞれの月における作業のある日の日数はSheet2に表示するものとし、それを表示するセルは各月の列範囲の中で最も左端にある列の7行目のセルである。(例えば画像中で2024年1月の行程がある日数はSheet2のB7セルに、2024年2月の行程がある日数はSheet2のAG7セルに表示させるものとする) これらの仮定に基づいた場合、Sheet2のB7セルに入力する関数の一例は次のようなものになります。 =IF(ISERROR(1/(INDEX($B$2:B$2,MATCH("*?",$B$2:B$2,-1))&INDEX($B$3:B$3,MATCH("*?",$B$3:B$3,-1))&"1日")),"",SUMPRODUCT((COUNTIFS(Sheet1!$B$3:$Z$3,"開始",Sheet1!$C$3:$AA$3,"終了",Sheet1!$B$4:$Z$4,"<="&INDEX($B$2:B$2,MATCH("*?",$B$2:B$2,-1))&INDEX($B$3:B$3,MATCH("*?",$B$3:B$3,-1))&{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}&"日",Sheet1!$C$4:$AA$4,">="&INDEX($B$2:B$2,MATCH("*?",$B$2:B$2,-1))&INDEX($B$3:B$3,MATCH("*?",$B$3:B$3,-1))&{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}&"日")>0)*ISNUMBER((INDEX($B$2:B$2,MATCH("*?",$B$2:B$2,-1))&INDEX($B$3:B$3,MATCH("*?",$B$3:B$3,-1))&{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}&"日")+0)))  Sheet2のB7セルに上記の関数を入力した後は、Sheet2のB7セルをコピーしてSheet2のAG7セルなどの他の月の行程日数を表示させるセルに貼り付けて下さい。 以上です。

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.7

参考までに、確認させてください。 》 1月のセルに16日と6日を足した21日と表示したい。 なぜ22日でなく、21日なのですか?

  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答No.6

回答No.2の訂正です。 説明がおかしかったので訂正です。 > 2行目と6行目は表示形式で同じ見た目にしてください。 6行目は数値で表示されますので、2行目はただの数値で1、2、3、4、5・・・として 「月」を表示する場合は 2行目と6行目を見た目同じにするのでしたら両方とも 表示形式の ユーザー定義で # "月" とか G/標準 "月" にしてください。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

小生が考え違いをしていることもあるので、その際はご免なさい。 **質問の意図が判り難い。状況の表現が足りない。 **下記のようなことを聞いているのではないか?それを確認するのがし目的です。 **すると既出の回答は、それでよいのか? ーー こういう質問者の職場の仕事をストレートに例として質問されると、読者・部外者には、全貌が判らないので、判り難いことが多い。 それだけに例の挙げ方や、説明の仕方に一段の工夫(詳しい説明)が必要と思う。 実例を挙げる際に、データの選定を誤ると、全体の多様なケースの1部を漏らして、解釈される恐れがある。 ーー 当方の勝手な、例で説明します。 本件 A2:E7 開始日 終了日 全日数 当月 翌月 1月5日 1月20日 16 16 0 1月25日 1月26日 2 2 0 1月28日 1月30日 3 3 0 1月30日 2月5日 7 2 5 2月15日 3月28日 42 14 28 3月20日 3月31日 12 12 0  C2の式 =B2-A2+1  D2の式 =IF(MONTH(A2)=MONTH(B2),C2,EOMONTH(A2,0)-A2+1)  E2の式 =C2-D2 この式は、うるう年や月末の大小は、自ずと反映される(折り込み済み)。 年越しも反映される。でも表データに年の表示は必要だろう。 当月と翌月しか跨らない。(3か月跨りのデータはないと、仮定)!!! == このD列、E列から、例えば「1月の該当日数の和を関数で出す」というのが、質問の意図ではないか。 質問の画像では、A列データは横1列に出てくる。 その回答式は、ちょっと考えたが難しくて、1つの式などの簡単な式で、回答がすぐ浮かばない。

  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答No.4

No.2の訂正です。 =SUMPRODUCT(($A$6:$L$6=A2)*($A$7:$L$7)) は =SUMIF($A$6:$L$6,A2,$A$7:$L$7) でも可能でした。 SUMPRODUCT好きなので頭がそっちにいってました。

  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答No.3

> 2月はうるう年なので14日と表示 3月のセルには29日と表示したい。 見逃してました。以下に変更してください。 A7に =IF(MONTH(A10)<>MONTH(B10),DATEDIF(A10,EOMONTH(A10,0),"d"),DATEDIF(A10,B10,"d")+1) B7に =IF(MONTH(G10)<>MONTH(H10),DATEDIF(EOMONTH(G10,0),H10,"d")+1,0)

  • yamada82
  • ベストアンサー率28% (15/53)
回答No.1

自分ならこんな感じで作ります。 作業日をmonth関数で月表示させて、それをcountif関数で各月の合計日数を集計します。テーブル機能も使えば範囲も勝手に広がってくれます。

関連するQ&A

  • 作業日程期間の月毎の日数を集計したいです。

    説明がわかりにくく大変申し訳ございませんが、ご教示いただけますと幸いです。 ほしい結果は、赤い枠の11行目です。 作業日の月毎の日数を割り出したいです。 手作業で入力する部分は、4行目(作業日)の開始と終了です。 5行目~7行目は計算式が入っています。5行目は4行目の日付から年を6行目は月を7行目は開始日と終了日が同じ場合は、開始日の日数のセルに日数を表示。月が違う場合は、開始日にはその月の日数が表示され、終了には残りの日数が表示されます。 連続した月ならこのままSUMIFS関数を使用し11行目に結果を出せるのですが、複数月にまたがっている場合はSUMIFS関数で間の月の日数を表示できません。その期間も11行目の月に日数を表示したいのです。 例えばセルJ4 2024/2/14 セルk4には2024/5/10の場合は、2月は16日 3月は31日 4月は30日 5月は10日の作業が発生します。 その結果を11行目のそれぞれのセルに合計をしていきたいのです。 つたない説明で本当に申し訳ございません。 もしご教示いただける方がいらっしゃいましたら宜しくお願い致します。

  • VBAで月の日数を表示させたい

    EXCEL2000でVBAを作成しています。 シートのセルに =EOMONTH(T4,1) という公式がはいっています。表示は平成17年10月分になっています。 ここのセルの日付に応じて月日数を表示したいのです。 何をしたいかというと 単価×31(月の日数)の計算をするため月日数をセルに自動入力したいのです。 よろしくお願いします。

  • 日付で属する年度を表示させるには

    ある期間を計算するのに、年度の日数が必要になります。 うるう年の場合は366日で割り戻さないといけないんで、うるう年が属する年度は年間の日数を366日、その他の年には365日としたいのですが。 その期間は開始平成23年6月1日~平成23年7月31日とした場合でも23年度の日数が366日なので、単価×(61/366日)で計算したいのですが。 何か良い方法はないでしょうか。 あるセルにうるう年が属する年度を判定させて年間の日数のセルに反映させるなど。 当方エクセル素人なのでよろしくお願いします。

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

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

  • EXCELで1か月分の総日数のもとめ方

    給与計算などで使いたいのですが、例えば、1月分は 12/21~1/20の期間で総日数が31日となりますが 3月分は2/21~3/20で計算すると総日数は28日です。 実現させたいのは2003年1月分と入力すると自動的に どこかのセルに総日数を表示させるようにしたいのです。 かつ、年が変わっても反映される式はあるでしょうか?

  • 指定した期間の日数計算方法(土日祝日除外)

    この場を借りましてご質問させていただきます。 要件:指定した期間に含まれる土日祝(日本の暦)を除外した日数を算出    両端入れ 例) セルA1:2016年5月2日    セルB1:2016年5月9日 がはいってたとして、上記2つの期間の日数は 8日 ですが 土日祝 を除外すると(5/3,4,5,7,8) 3日 です。 このような日数計算を関数で実現することができましたら ご教示いただくと幸いに存じます。 よろしくお願いいたします。 

  • 経過日数を求める式が知りたいです

    経過日数を求める式が知りたいです。 例えば、2013年9月12日から今日まで経過日数とかです。 うるう年計算もあることが前提です。 グレゴリオ暦などでもいいので、経過日数がわかればいいのです。 ですので、うるう年計算された、指定日(YYYY/MM/DD)までの日数がわかれ 問題なしです。(経過日は上記の今日-指定日とすればいいので) 但し、EXCELや%などは使わずにです。シフト演算もなしです(>>や<<です)。 これが結構難しいので、今はお手上げ状態です。 よろしくお願いいたします。

  • Excelでの日数計算、表示の仕方

    Windows98、Microsoft Excel2000を使っています。 エクセルで料金計算のシートを作成していて、いつからいつまでという日数によって料金が違うので、日数を「2002/10/1」から「2002/10/5」までの「5日まで」というふうに計算して「5」という数字を表示させるようにしています。ここまではいいのですが、これが40日を過ぎるとさすがに「○日」という表示では分かりにくくなるので「1ヶ月まで」、「2ヵ月まで」と表示させたいのですが、出来るのでしょうか? 例えば、「2002/10/1」から「2002/12/1」までの「2ヶ月」というかんじで、今まで「何日」という日数を計算していたものを「何カ月」と出来ないでしょうか? “セルの書式設定→表示形式”のところで何かすればいいのでしょうか?? 説明がわかりにくいかもしれないのですが、宜しくお願いいたします。

  • 貸付金(又は、借入金)の利息計算方法について

    このカテゴリーでいいのかは、よく分からないのですが、以前「普通預金の利息計算はうるう年を無視して365日で計算する。」というのをお見かけして大変勉強になりました。しかしながら、いわゆる借入金、ローンの利息計算の仕組みはどうなっているのでしょうか?100万円を借りて毎月5万ずつ25日の給料日に返す(均等返却)として貸す側はうるう年とか2月4月~とかの31日ない月などを勘案して返済の一覧表を作成しているのでしょうか?疑問なのは、うるう年、月の日数のみならず、例えば返済日が銀行の休業日だった時(日・祝祭日・土曜日) なら前月から返済日の日数は異なります。その辺りも考えてスケジュールを組んでいると?もしそうであれば、エクセルなどで元本、金利などの残高、キャッシュフローの時系列的な一覧表などは作成可能なのでしょうか。どうぞ宜しくご教授願います。

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

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

専門家に質問してみよう