• ベストアンサー

Excelでの経過時間の計算について教えてください

Excelで経過時間の計算をしたいです。 A1セルには 2007/10/1 10:31:57 B1セルには 2007/10/3 17:01:32 とはいっている時に以下の考慮をした計算をしたいです。 1.稼動時間帯の範囲内の経過時間で計算したい 一日の稼動時間帯は9:00から20:00(20:01から8:59までは計算対象外にしたい)  なので、A1セルの分は20:00-10:31=9:29を計算に使用したい 2.営業日を考慮したい(日本の祝日と土曜、日曜)  営業日以外は計算から外したい 以上が質問内容です、よろしくお願いします。

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

  • ベストアンサー
  • Nii
  • ベストアンサー率48% (79/162)
回答No.2

VBを暫く弄ってないので、思い出すのに時間が掛かりそうなので、とりあえず、参考になりそうなページを抜粋 Excelで日付関連は、http://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/today.htm#networkdays 祝祭日に関しては、 http://koyomi.vis.ne.jp/mainindex.htm 上記と関係ないけど、祝日かどうかをVBで組むと、下記のようになるかな? 昔作ったので、現在の祝日と合致してるか疑問ですが^^; 手元にあるExcel2000の場合ならば Altキーを押しながらF11キーを押して、VisualBasicを立ち上げる メニューから「挿入」「標準モジュール」に貼り付け A1セルには 2007/1/1 って入ってる場合、 A1セルに =国民の祝日(A1,1) っていれたら 元日って表示される。 ------ ここから ------ Public Function 国民の祝日(今日 As Date, chk_l As Integer) As String Dim 年 As Long 国民の祝日 = "" 年 = Year(今日) 月日 = Format(今日, "mmdd") If Format(今日, "yyyymm") < 194807 Then Exit Function End If If 月日 = 101 Then 国民の祝日 = "元日" Exit Function End If If 年 < 2000 And 月日 = 115 Then 国民の祝日 = "成人の日" Exit Function ElseIf 年 >= 2000 Then If 第一月曜(DateSerial(年, 1, 1)) + 7 = 今日 Then 国民の祝日 = "成人の日" Exit Function End If End If If 年 >= 1966 And 月日 = 211 Then 国民の祝日 = "建国記念の日" Exit Function End If If DateSerial(年, 3, Int(0.24242 * 年 - Int(年 / 4) + 35.84)) = 今日 Then 国民の祝日 = "春分の日" Exit Function End If If 月日 = 503 Then 国民の祝日 = "憲法記念日" Exit Function End If If 月日 = 429 Then If 年 < 1989 Then 国民の祝日 = "天皇誕生日" Exit Function ElseIf 年 >= 1989 And 年 < 2007 Then 国民の祝日 = "みどりの日" Exit Function Else 国民の祝日 = "昭和の日" Exit Function End If End If If 年 >= 2007 And 月日 = 504 Then 国民の祝日 = "みどりの日" Exit Function End If If 月日 = 505 Then 国民の祝日 = "こどもの日" Exit Function End If If 年 >= 1995 Then If 年 < 2003 And 月日 = 720 Then 国民の祝日 = "海の日" Exit Function ElseIf 年 >= 2003 Then If 第一月曜(DateSerial(年, 7, 1)) + 14 = 今日 Then 国民の祝日 = "海の日" Exit Function End If End If End If If 年 >= 1966 Then If 年 < 2003 And 月日 = 915 Then 国民の祝日 = "敬老の日" Exit Function ElseIf 年 >= 2003 Then If 第一月曜(DateSerial(年, 9, 1)) + 14 = 今日 Then 国民の祝日 = "敬老の日" Exit Function End If End If End If If DateSerial(年, 9, Int(0.24204 * 年 - Int(年 / 4) + 39.01)) = 今日 Then 国民の祝日 = "秋分の日" Exit Function End If If 年 >= 1966 Then If 年 < 2000 And 月日 = 1010 Then 国民の祝日 = "体育の日" Exit Function ElseIf 年 >= 2000 Then If 第一月曜(DateSerial(年, 10, 1)) + 7 = 今日 Then 国民の祝日 = "体育の日" Exit Function End If End If End If If 月日 = 1103 Then 国民の祝日 = "文化の日" Exit Function End If If 月日 = 1123 Then 国民の祝日 = "勤労感謝の日" Exit Function End If If 年 >= 1989 And 月日 = 1223 Then 国民の祝日 = "天皇誕生日" Exit Function End If If 今日 = #4/10/1959# Then 国民の祝日 = "皇太子明仁親王の結婚の儀" Exit Function End If If 今日 = #2/24/1989# Then 国民の祝日 = "昭和天皇の大喪の礼" Exit Function End If If 今日 = #11/12/1990# Then 国民の祝日 = "即位礼正殿の儀" Exit Function End If If 今日 = #6/9/1993# Then 国民の祝日 = "皇太子徳仁親王の結婚の儀 " Exit Function End If If chk_l Then If 今日 > #4/12/1973# Then If Weekday(今日) = 2 Then If Len(国民の祝日(今日 - 1, 0)) Then 国民の祝日 = "振替休日" Exit Function End If ElseIf 年 >= 2005 Then If Weekday(今日) = 3 Then If Len(国民の祝日(今日 - 1, 0)) Then If Len(国民の祝日(今日 - 2, 0)) Then 国民の祝日 = "振替休日" Exit Function End If End If ElseIf Weekday(今日) = 4 Then If Len(国民の祝日(今日 - 1, 0)) Then If Len(国民の祝日(今日 - 2, 0)) Then If Len(国民の祝日(今日 - 3, 0)) Then 国民の祝日 = "振替休日" Exit Function End If End If End If End If End If End If If 年 >= 1985 Then If Len(国民の祝日(今日 - 1, 0)) Then If Len(国民の祝日(今日 + 1, 0)) Then 国民の祝日 = "国民の休日" Exit Function End If End If End If End If End Function Public Function 第一月曜(今日 As Date) As Date 今日 = DateSerial(Year(今日), Month(今日), 1) Do Until Weekday(今日) = 2 今日 = 今日 + 1 Loop 第一月曜 = 今日 End Function ------ ここまで ------

fuutai2
質問者

お礼

詳細に教えていたたぎ助かりました。 有難うございました。

その他の回答 (2)

  • Nii
  • ベストアンサー率48% (79/162)
回答No.3

前提条件  A1 始業時間(今回は9:00)  B1 終業時間(今回は20:00)  C1 終業時間-始業時間の勤務時間(今回は11:00)  N* 祝日一覧  A3~受付日&時間  B3~回答日&時間 とりあえず、日付と時間に分解  C* =DATE(YEAR(A*),MONTH(A*),DAY(A*))  D* =TIME(HOUR(A*),MINUTE(A*),SECOND(A*))  E* =DATE(YEAR(B*),MONTH(B*),DAY(B*))  F* =TIME(HOUR(B*),MINUTE(B*),SECOND(B*)) 勤務時間外を補正  G* =IF(D*>$A$1,IF(D*<$B$1,D*,$B$1),$A$1)  H* =IF(F*>$A$1,IF(F*<$B$1,F*,$B$1),$A$1) 受付日と回答日の時間を計算  I* =IF(C*=E*,H*-G*,$B$1-G*+H*-$A$1) 経過日数求め、その間の時間を計算し足しこむ  J* =NETWORKDAYS(C*,E*,N1:N*)  K* =IF(J*>2,(J*-2)*$C$1,0)  L* =+K*+I*

fuutai2
質問者

お礼

ご丁寧に有難うございました。 助かりました!

noname#79209
noname#79209
回答No.1

「祝祭日も除く」という条件があるので難しくなっています。 基本的には、 1.初日の勤務時間を算出する。 2.最終日の勤務時間を算出する 3.2日目から最終日の前日まで就労日を算出する。 4.土日とかぶらない祝祭日の日数を出す。(それ以外の休業日を含む) 5、「(3)-(4)」に11(時間)をかける。 4.(1)+(2)+(5)を算出。 で、いけるのですが、(4)の日数が年によって異なるので非常に算出しにくいのです。 あえて、やるとすれば、 土日でない休業日を別シートにリストしておき、それぞれの日の隣のセルに =IF(AND($A1>=Sheet1!$A$1,$A1<=Sheet1!$B$1),1,0) あるいは =AND($A1>=Sheet1!$A$1,$A1<=Sheet1!$B$1)*1 などとして、これらの数を合計するしかないでしょう。 なお、一般的な祝祭日以外に、御社の創立記念日での休業や正月の2日、3日や年末の仕事納め以降も考慮する必要があります。 また、休日出勤、遅出、早退、遅刻、残業、昼休み、休憩時間はどうするのか等、他にも考慮する事項がありそうですね。

fuutai2
質問者

お礼

有難うございました。 助かりました。 どうにかそれらしいものが出来たのでこれから使っていきたいと思います。

fuutai2
質問者

補足

vizzarさん、回答有難うございます。 今回何の為の計算かといいますと、コールセンターの回答を受けてから 回答を返すまでのリードタイムを出したいと思っています。 単純な時間計算にしてしまうと、業務終了間際にきたものを翌日に回答した場合、夜中の時間も足されたものになってしまうので 困っていました。 あまり知識がないので、まずは回答を読み込んでみたいと思います。 取り急ぎお礼まで

関連するQ&A

  • エクセル 日数計算 特定の日だけカウントしない2

    お尋ねします。 計画からの遅れ日数を計算したいと思っています。 休日は入れません。営業日(稼働日)のみでカウントします。 ただし、土曜日は基本的に営業日(稼働日)です。 日曜日と祝日だけを除いた日数の計算をしたいのです。 例)  12/23~1/15 の 日曜と特定の休日(12/29~1/5)除いた日数の計算 networkday等つかうと、土曜日も休日となってしまうため、困っています。 どなたか知恵を貸してくださいませんでしょうか? よろしくお願いいたします。

  • エクセル 日数計算 特定の日だけカウントしない方法

    お尋ねします。 稼働日日数の計算をしたいと思っています。 ただし、土曜日は営業日なので、 日曜日と祝日だけを除いた日数の計算をしたいのです。 例)  12/23~1/15 の 日曜と特定の休日(12/29~1/5)除いた日数の計算 networkday等つかうと、土曜日も休日となってしまうため、困っています。 どなたか知恵を貸してくださいませんでしょうか? よろしくお願いいたします。

  • 経過時間の計算式

    各セル「2008/10/1 13:00」、「2008/10/7 20:00」があった場合、経過時間が分かるような計算式を教えてください。

  • エクセルで時間差を計算する方法

    セルで区切られた年月日、時間から時間差を計算する方法 例 2018年4月1日日曜日15時30分から2018年4月3日火曜日12時15分までの経過  時間を求める方法   表を添付しますのでよろしくお願いします。

  •  エクセルでの経過時間の分計算。

     エクセルでの経過時間の分計算。  よろしくお願いします。セル内に”0900”と入力すれば、”=NOW()”関数式で表示されている現在時間からの経過した分を表示できないか考えています。何か良い方法が分かる方がいれば、よろしくお願いします。 例)      A        B        C 1  10:05:39    0900        65 2 3 A1"=NOW()" B1"0900と入力" C1"経過分時間65を表示"

  • EXCELで経過時間計算および作図

    実験データをEXCELで計算させ、結果を作図する場合なのですが、 (1)経過時間計算:入力として測定した時間をセルの書式指定で「日付、2006/6/2 16:20」と言った形式を指定したセルに入力し、経過時間を引き算し、その結果をセルの書式指定「時刻 13:30」とすると、経過時間が24時間以内であれば良いのですが、それ以上の時間では24進法で区切られてしまいます。25:00とか100:00時間と言った経過時間を表示させるのはどうしたらよいでしょうか? (2)作図:経過時間を横軸にして、結果を縦軸として作図したところ、横軸がやっぱり24進法で区切られます。これも25:00とか100:00時間と言った経過時間を表示させるのはどうしたらよいでしょうか?

  • エクセル 時間の計算

    エクセル 時間の計算  エクセルで、一週間の合算時間が30時間あります。一日の勤務時間が7時間45分です。 シートのA1に7:45、A2に30:00が入っています。その時一日を7時間45分と計算して何日何時間何分としたいのですが、時間まではなんとかできたのですが、分の所でつまずいてしまいました。 ちなみに日はB2セルに=(A2/A1)&"日"、時間はC2セルに=ROUNDDOWN(MOD(A2,A1)*24,0)&"時間"としています。書式は標準です。

  • 営業日のみの経過日数の求め方

    営業日のみの経過日数の求め方 エクセルで土日祝日を除いて、今までの経過日数を出すにはどうしたら良いでしょうか?                 (1)予備のセルに「TODAY」 セル A1 (2)発生した日に日付      セル B2 (3)経過日数          セル C3    (1)ー(2)=(3)経過日数 という風にしたのですが、それだと営業日以外の土日祝日が入ってしまいます。 どのようにすればいいのでしょうか? よろしくお願いします。

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

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

  • EXCELの時間計算

    セルA1に、「9:43:20」と時刻が入力されています。 セルB1に、「3.2」と時間(分)が入力されています。 セルC3には、A1の時刻から,B1の時間が経過した後の時刻を 表示させたいです。 ※B1の「3.2」を3.2分(3分12秒)として計算したいです。 C3の計算式を教えてください。 ※計算した結果の時刻は,9:46:32です

専門家に質問してみよう