はもちくわ

コードについて自分なりの解釈を書いてます。

【Excel】関数だけで「24時間対応」の勤務時間表をつくってみる(残業、深夜勤務計算)

f:id:hamochikuwa440:20220410022258p:plain

自分で勝手に始めた「関数だけで」シリーズ。
書いているうちに、「Excel関数縛りで24時間の勤務時間表を作ったらどこまでできるか?」と興味がわきまして、今の自分はまーーーーったく使わないのに作ってみることにしました!
まだ、勤務時間の計算がExcel手入力の方、、、お疲れさまです!
以前は私もそうでした。。。もし、この記事が少しでも参考になれば、嬉しいです。

勤務時間の計算は、労働契約状況や会社によって違うと思いますが、細かい点は、環境によって変えてください。
ここでは、月末締め、週残業は月曜はじまりの週単位、法定休日は該当日を手入力、残業月60時間オーバーは別集計しない、になっています。作ってみて思ったんですが、勤務時間の計算は契約状況によって違ってくるので、作り込んでしまうと、使える幅が狭くなってしまいそうで加減が難しいなと感じました。法定休日にからむ代休とか振休をどうするとか、月単位の変動労働制とか、、、逆に広く使うことを考えずに、特化してしまう方が、決まっている分簡単ですね。

 

このサンプルファイルを、フリーサーバーの自作ページでダウンロードできるように準備してましたが、ページを整理することにしたのでやめました。Excelファイルで欲しい方はコメントかTwitterのDMでメッセージください。ファイル便か何かでお送りいたします。
趣味でやってますので、もちろん無料です(笑)
もし、カスタム希望がありましたら、締め切り無しならバイト休まなくてもできるので、無料でやります(笑)メッセージください。
1年ぐらいファイルをサーバーに置いていたんですが、ほぼダウンロード実績がなかったので、やめることにしました(笑)使える容量が1GBなんで、もったいないですからね。おかげで130KBほど空きました。

 

では、順番に作成手順で説明していきます。
まずはこんな感じにします。

f:id:hamochikuwa440:20220412030702p:plain

見えますか?
表示形式が違うと結果が全く変わって表示されてしまうので、同じように作成する場合は気をつけてください。特に時間計算に使うセルは、絶対に23時間59分以上の表示が必要になるので、[h]:mmにするのは必須です!
この表示形式[h]:mmは「ユーザー定義」の方を探してみてください。探しても無い方場合、[h]:mm:ssならあると思います。それを選んで、表示形式の設定ウインドウのサンプル枠の下に直接触れるテキストボックスがありますので、そこで:ssを消してしまえばOKです!

 

次に、日付欄を準備しましょう。日付は直入力でもいいですが、PCなんで、日付計算して万年カレンダーにしておきましょうか。これ便利ですよ。社員だった時はすごい使ったなぁ。。。まっ!いまはバイトなんで使う当てなし!!(泣)

さて、、、シートの一番上、A1セルの日付を変えれば自動で日付がかわる設計です。A1セルは計算対象月の始まりの日(1日)を想定していますが、ひねくれ者が4/5と入力しても使えるように、入力された年と月を抜き出して使うようにします。年と月を分けてセルに入れるでもいいですね。そこは各自任せます。

この万年カレンダーにするポイントは、第1週目とそれ以降の週で式が違うことです。この記事では月曜はじまりの週単位で週残業を集計するようにしていますので、月初が月曜日以外からスタートする場合、前月の月末勤務状況がないと週残業の集計ができません。なので1週目は前月の日付を出力させます。
まず、第1週目の月曜日の日付に下の関数式を入れて、日曜日までオートフィルしてください。

=IF(WEEKDAY(DATE(YWAR($A$1),MONTH($A$1),1),2)=ROW()-ROW($A$6)+1,DATE(YEAR($A$1),MONTH($A$1),1),IF(WEEKDAY(DATE(YWAR($A$1),MONTH($A$1),1),2)>ROW()-ROW($A$6)+1,B7-1,B5+1))

f:id:hamochikuwa440:20220413201626p:plain

一番上の式を入れて確定した後、「#####」とありえない日時が入ったときの表示になると思いますが、下方向にオートフィルすると消えると思います。簡単に説明すると、式の中に条件分岐が3つ入ってます。

条件1「1日はセルの位置と同じ曜日である」
命令「1日を表示させる」
条件2「1日はセルの位置より後ろの曜日である」
命令「下のセルより1日マイナスする」
条件3「1日はセルの位置より前の曜日である」
命令「上のセルより1日ブラスする」

このようになっています。そのため、1日に該当する曜日がない場合、日付が定まらないので表示がおかしくなります。
そして、お気づきの方もいらっしゃるかと思いますが、厳密に言えば月曜日と日曜日は、上下を気にする必要がありません。月曜は下だけ、日曜は上だけでいいわけです。なので、日曜、月曜だけ式を変える方がいいのかもしれません。ですが、条件を考えると、「WEEKDAY関数の月曜はじまりの前の曜日」とありえない条件が入ってます。この条件になることはないわけです。これは日曜日も同じです。
なので式を新たに設定するよりは同じ式で流用したほうが手間は省けますね。もし、急に暦が変わって、「1週間を8日にして地曜日を作ります!」なんてことがあれば、、、多分もっと大きな問題が発生していると思うのでこんなもの作ってる場合じゃないですよ(笑)
え?なんで「地曜日」かって?いや、曜日って天体っぽいから、地球かなって思いまして(笑)そうするとどこの間に入るか問題がでますよきっと!ああ、でも、地球以外でないとダメとか言われそうですね。。。じゃあ、天王星で天曜日にしておきますかっ!!多分天ぷらの日になりますね。



申し訳ない。脱線も程々に、、、

 

第2週目以降は下の式に変えて、同じように表の一番下までオートフィルしてください。

=IF(B12="","",IF(DAY(B12)=DAY(DATE(YEAR($A$1),MONTH($A$1)+1,1)-1),"",B12+1))

これで当月末で表示が止まり、以降は空白になります。
この式は、1つ前のセルが月末になるか、空白なら空白を表示するという命令になっています。月末の数字は翌月1日の1日前ですよ。DATE(YEAR($A$1)MONTH($A$1)+1,0)と0日にしてもOKです。そのときはDAY関数内で−1してますが、しなくてよくなります。
勤務時間表は締めより後は集計に影響しませんので、月末以降は表示させてません。もし、月末以降も表示させたいときは、第1週目の式のまま、一番下までオートフィルすればOKです。
これ書いてて思いましたが、万年カレンダーも深堀りすると記事になりますね(笑)

 

はい、それでは計算にはいります。まずは拘束時間を計算します。

普通に考えれば、退勤時間ー出勤時間で求められますが、深夜の人はちょっと厄介です。
例えば、22時スタート6時終わりとかです。時間だけで見ると、逆転しているので引き算できません。
でも大丈夫!PCは日時を常に日付と時間をセットで考えてくれてますので、時間と日付をセットで入力すれば、逆転する問題は出ないのです!!


「おいおい、、、こいつマジか、、、?!」
って思われましたよね(笑)
Excelで勤務時間表を手入力しているのに、日付まで入力してたら、

「アホか!めんどくさっ!やってられるかっ!!」

って暴れたくなりますよね。だって時間入力するなら 22:だけ入れてEnterもしくはTab押せば22:00になりますからね。22時出勤、翌日6時終わりなら、22:Tabキー6:Tabキーですわな。でも、これだと、同じ日の22時と6時とPCは考えるので逆転問題は残ったままです。

では、早速、それを加味してやってみます。
次の図ように、表の右側に拘束時間欄を作って、ダミーで時間をいれてください。そのあとに下の式を拘束時間の欄に入れます。

=IF(D6="",0,IF(E6>D6,E6-D6,E6+1-D6)

f:id:hamochikuwa440:20220413212617p:plain

図のように時間を入れていれば、式を確定すると9:30になると思います。
それでは、このまま日曜までオートフィルして、ダミー時間も1週間分入れてみましょう。

f:id:hamochikuwa440:20220413214624p:plain

ちょっとありえない時間になってますが、自由に変えて書いてみてください。24時間までの拘束時間はちゃんとできてると思います。
さて、計算をみてみますと、時間が逆転したとき「+1」されているのがわかると思います。
「なんのっ!?」ってなりますね。(ピスタチオか(笑))
Excelって時間計算のときは勝手に24進数のようになるみたいで、24時間=1で計算されます。なので、逆転した場合は、1日経過してますよ〜ってことで「+1」です。24時間を足してるんですね。これ知ってると便利ですよ。2時間足したいなら+(2/24)ですし、分を含めて時間に直すなら24を掛ければいいのです。
そうすると、ほらっ!なんとっ!時給計算が余裕じゃないですか〜。まあ、ここではしませんけど。

次に、拘束時間の中で深夜時間が何時間あるのか判定します。
魔法みたいな短い関数で、どうのこうのして、特定の時間だけ抜き出すというのはExcelでは無理でして、、、ただ条件を考えて、すべて盛り込むしか方法がありません。なので、逆に、今から解説する方法じゃなくても、条件を揃えてあげれば、どうにでもなるってことですね。もっと簡単な方法もあるかもしれません。私は戦力外通告をうけたぐらいの人なので、、、多分ある(笑)



まず、条件を考えましょう。次の図を見てください。

f:id:hamochikuwa440:20220413223726p:plain

これは、法定の深夜時間帯にかかる勤務パターンに、時間計算上考えねばならないパターンをプラスしたものです。9パターンですね。
もし、時間が0時にリセットされないなら、4パターンですけど、日常生活で使うには不便でしょうね(笑)

さて、これが多いと考えるか、少ないと考えるかですが、勤務開始時間と終了時間の、すべての組み合わせを条件に設定すれば、理論上はできるはずですよね。でも、何通りありますか?考えたくもない(笑)
なので、まだ少ない方だと思いますよ。9パターンは(笑)

では、条件をつけて、パターンを潰していきましょう。
深夜時間だけ考えればいいので、勤務時間がどうのこうのではなく、深夜時間の開始時間と終了時間が何時になるかで考えていきます。
まずは、深夜開始時間から見ていきます。

条件1 勤務開始時間が22時以上のときは、勤務開始時間
当たり前のものですね。これを先程の図で、該当するものを赤にしてみると、

f:id:hamochikuwa440:20220413230202p:plain

なんと4つ消えました。

条件2 勤務開始時間が5時未満のときは勤務開始時間
先程と同様に当たり前ですね。これでまた図に黄色で表記すると

f:id:hamochikuwa440:20220413231140p:plain

これで上から3パターンだけです。

上の条件1と条件2を抜けて来たということは、勤務開始時間は5時以上22時未満です。
その中で、深夜勤務にかかるものを3つ考えましょう。
図を上3つに絞って、時間を数値と考えてみてみます。

f:id:hamochikuwa440:20220414024714p:plain

こうすると、条件がわかりやすくなると思います。
日付変更線をまたいで左は数値として大きく、右は小さくなるのがわかると思います。
拘束時間の計算のときに、時間が逆転した場合「+1」するとしてましたが、その場合は数値がリセットされる日付変更線をまたいだことになるため、深夜にかかっていると言えるわけです。この3パターンは、勤務開始時間は5時以上22時未満のどれかでした。ということは、開始と終了の時間が逆転したときの深夜開始時間は???、と考えると、深夜時間の始まり時間の22時に設定すれば良いこととなります。
さて、この時、もう一つ考えておくことがあります。勤務開始時間と終了時間が一緒の場合どうしましょう?
24時間勤務なのか、0時間勤務なのか、、、普通に考えると、出勤して働かずに同じ時間に退勤。「えっ!?何しに来たん??怖っ!!」となるので、同じ時間は24時間勤務したと考えるようにしましょう。
なので、

条件3 勤務終了時間が勤務開始時間以下なら22時
ということになります。

f:id:hamochikuwa440:20220414031948p:plain

ここまできて、まだ条件を抜けてくるツワモノが最後のラインです。
でも、ここまで抜けてきてるということはすでに絞り込まれてますので、あとひと押しです。

条件4 勤務終了時間が22時より大きい時は22時

f:id:hamochikuwa440:20220415100441p:plain

だけです。ここは以上ではなく、より大きいでなくてはなりません。

それでは、これすべてをまとめて式にすると

=IF(G6=0,0,IF(HOUR(D6)>=22,D6,IF(HOUR(D6)<5,D6+1,IF(OR(E6>=D6,E6>(22/24)),22/24,0)))))

1行にすると非常にわかりにくいですね。考え方は上で説明したとおりです。
細かく式の解説はしませんが、時間の比較の箇所で、HOUR関数で時間を抜き出して比べている箇所と整数を24で割っている箇所があります。好みではありますが、時間ちょうどで比べることができる箇所はHOUR関数で判断し、分も絡む場所は24の割り算で対応してます。もし、どちらかに合わせたいのなら、整数を24で割る方でないと結果がおかしくなります。
また、0時から5時の間から深夜勤務が開始されるときは、拘束時間の計算で出てきた「+1」をしてます。これは、理由が2ありまして、1つは、拘束時間が0時間の時や深夜勤務時間にかかっていない時は、深夜勤務なしとして0表記にしてますので、0時が邪魔になることです。あと1つは、深夜勤務を何時間しているかの式をつくるための途中式なので、あとあと、逆転時間の計算をする手間を省くために先に処理していることです。

では、先程の拘束時間の隣に欄を作り、上の式を入れて1週間分オートフィルしてみましょう。

f:id:hamochikuwa440:20220414020148p:plain

すると勤務時間が深夜時間にかかっている場合の開始時間が22時始まりで表示されます。0時以降は24を足された数字になります。

 

それでは深夜勤務終了を同じく考えます。
開始時間を先に出しているので、終了時間は少し簡単になります。

条件1 深夜開始時間が0でない
まずは、開始時間の判定をそのまま使います。そもそもの前提条件です。勤務時間が深夜勤務にかかっているなら必ず始まっているはずですから、まずこの前提条件をクリアしているかどうかで次の条件にいきます。クリアしてなければ深夜勤務ではありません。

f:id:hamochikuwa440:20220415103011p:plain

条件2 勤務終了が22時より大きい時は勤務終了時間
この条件は、以上じゃなく、より大きいです。22時勤務終了は深夜判定になりません。22時1分からですね。

f:id:hamochikuwa440:20220415104003p:plain

条件3 勤務終了が5時以下の時は勤務終了時間
ここは5時までが深夜勤務ですので「以下」になります。

f:id:hamochikuwa440:20220415104648p:plain

条件4 それ以外は29時(5時)
これまでの条件を抜けてきたものは下の図の3パターンです。これは、すでに深夜時間判定はされています。ということは、深夜勤務終了後も継続勤務していると言えますから、深夜終了時間だけ考えればよいので、そのまま深夜終了時間の29時(翌5時)とできます。

f:id:hamochikuwa440:20220415110032p:plain

これをすべて式にすると

=IF(H6=0,0,IF(E6>(22/24),E6,IF(HOUR(E6)<=5,E6+1,29/24)))

こうなります。これを先程の深夜開始時間のとなりに欄を作り、同じようにオートフィルしてください。

f:id:hamochikuwa440:20220414044558p:plain

このように深夜勤務の終了時間ができると思います。開始時間と同様に、0時から5時は24を足した時間になっています。

 

さあ!逆転が無いように処理してますので、あとは終了から開始を差し引きするだけですね!

と言いたいところですが、鬼畜のごとく人を働かせるぐらいの気持ちで見てみてください。まだ1つだけ条件にあってないパターンがあります。お気づきでしょうか?多分、まっとうな人間ならば考えつかない(笑)

それは、深夜時間帯から勤務開始して、次の深夜時間帯に勤務終了するパターン。エグい。。。本当は10パターン(厳密に言えば11になりますが、、、)だったのです。

f:id:hamochikuwa440:20220415111720p:plain

これは深夜開始と深夜終了を考えなくても、図をみてわかるように、前の条件分岐でヒットしています。ただ、計算用に時間を抜き出してますが、その時間が、開始と終了で逆転しています。なんと、、、ここでも逆転があって、計算できない可能性があったわけです。
どんな場面があるか、例をあげますと、深夜1時に仕事開始して、そのまま23時まで勤務した場合です。これを計算用に抜き出した時間で考えると、深夜開始が25時、深夜終了が23時と逆転になっています。
実際の計算も、1時から5時までの4時間と22時から23時の1時間の5時間となり、単純に深夜終了から深夜開始を引く計算にならないわけです。

しかし、こんな勤務状態って、、、、しかも、深夜手当も満額与えない長時間拘束とは、、、まさに鬼畜の所業。。。

それではそれを加味して、深夜終了時間の横に欄を作って、深夜勤務時間の計算式を作っていきます。

=IF(H6=0,0,IF(I6<=H6,I6-(22/24)+(29/24)-H6,I6-H6))

f:id:hamochikuwa440:20220414050837p:plain

これで深夜時間の拘束時間が計算できました!!


が、、、、このままですと、、、なんか、、、日常ではありえない24時から29時が現れる謎2列ができてしまって、勤務時間表としては横に長く長くなが〜く、なってしまいます。それになんと言っても、かっこ悪い。。。


この【H列】と【I列】は消してやりましょうか。
よしっ!!セルの幅をギュッと0幅にして、、、、
いやいや、、ちょっと不自然じゃない??


そんな時はっ!!


全部式にまとめてセルに収納してしまいましょう!!
やり方はガッツリ長い関数にする方法と式に名前をつけて使う方法の2種類です。
どちらもやっていることは同じで、考え方も同じです。

まず式が参照しているセルをみながら考えます

f:id:hamochikuwa440:20220414054803p:plain

深夜開始【H列】と深夜終了【I列】を消して、深夜時間【J列】に格納するのですから、深夜開始【H列】と深夜終了【I列】は単独で機能してもらわないといけません。
図を見ると、深夜開始【H列】は消える列を参照していませんので、このままで大丈夫です。
しかし、深夜終了【I列】は消える深夜開始【H列】を参照しています。幸い、一箇所だけのようです。ではそこを解決しながら深夜時間【J列】に格納します。

 

それでは、ガッツリ長い関数式にする方法です。
双眼鏡マークの置換機能は使ったことありますか?
それを使います。
まず、問題ない深夜開始【H列】の一番上の式を数式バーからでも、セルからでも、どちらでもよいので、「イコールを外して」コピーします。
(注:図ではサンプルの作成手順の都合で、列固定の参照になってますが、これまでの説明通り、参照固定してなくて大丈夫です。)

f:id:hamochikuwa440:20220414111144p:plain

次に、下の図のように、リボンのホームタブ「検索と選択」を選んで、置換を選びます。

f:id:hamochikuwa440:20220414111823p:plain

出たウインドウの検索する文字列に、先程コピーしたセルの場所(サンプルではH6)を入力し、置換後の文字列にイコールを外してコピーした式を入れます。

f:id:hamochikuwa440:20220414112534p:plain

そうしましたら、図のように「すべて置換」を押します。

f:id:hamochikuwa440:20220414112945p:plain

このように、先程まで式で参照していたシート内の全部のセル名が、参照先のセルに入っていたコピーした式に置換えられたわけです。
先に、問題ない深夜開始【H列】を置換えたので、一緒に深夜終了【I列】も置き換わって解決しているはずです。
なので、このまま同じように、深夜終了【I列】の一番上の式のイコールを外してコピーし、置換機能でシートのI列のセルを参照している箇所を置換えましょう。
すると、

f:id:hamochikuwa440:20220414114353p:plain

と、このように置換機能を使うと簡単に式が合体できます。
ただ、とんでもなく長い関数式が出来上がります。直接セルを選択して見ようとすると、環境によってはカーソルがぐるぐる回ってフリーズするか、運が悪いとファイル飛んでしまうかもしれません。1つのセルで参照しているセルの数が多すぎるとこうなります。なので、こうなると直接編集はあまりおすすめしません。編集は今回と同じように分けて行い、置換えで合体しましょう。
ただ、セル内の式を表示させようとしなければ、普通に動きます。このまま下方向にオートフィルさせて、【H列】と【I列】を削除してください。

 

そして、もう一つ。
式に名前をつける方法です。
先程の考え方と同様に、深夜開始【H列】の一番上の式から名前を設定します。数式バーもしくはセルから、今度は「イコールも含めて」式を直接コピーしてください。

できましたら、図のようにリボンの数式タブの名前の管理を選択し、新規作成を押してください。

f:id:hamochikuwa440:20220414143530p:plain

そうしますと、名前の定義のウインドウが出てきますので、

f:id:hamochikuwa440:20220414144313p:plain

図のように名前をつけて、コピーした式をイコールごとペーストして入力します。
できましたら、OKボタンです。
図では列固定の$がついてますが気にしないでください。あってもなくても大丈夫です。

f:id:hamochikuwa440:20220414144940p:plain

すると、入力した名前の情報がリストで表示されます。もし修正が必要な時、再設定が必要なときは、リストから選択できます。式の状態をみると勝手にシート名(ここではname!)がついてます。これは式に名前を設定する際、シートを相対参照にできないためです。名前はブック全体で使えますが、参照するデータは、必ず設定したシートを参照することになります。

できましたら、置換を使ったときと同様に、H6セルを参照している式の箇所を名前に置換えます。先程と同様に置換えを使って、一度に置換えてもよいです。
ここでは、まず深夜終了【I列】(I6)の式の初めの条件分岐で使ってるH6の参照だけ手入力で、先程つけた名前のnight_stに変更します。

f:id:hamochikuwa440:20220414150525p:plain

このように式に直接入力する際、名前を英語(アルファベット)にしておくと、入力候補リストにでてきます。便利なのでオススメです。

さて、I6セルの式内のH6を名前に置換えられたしょうか?
次は、この名前に置換えた後のI6セルの式を、イコールも含めて式だけを直接コピーします。先程設定した名前ごとコピーするんです。そして、先程と同様の手順で、この名前入りの式にも名前をつけてください。
このサンプルではnight_edにしてます。

f:id:hamochikuwa440:20220414152853p:plain

このように名前の中へ先に作った名前も使用できます。循環参照には気をつけてください。
これで、消したい列のそれぞれの式を、列固定の行可変で、名前設定できました。深夜時間【J列】の参照先を名前に変更してください。直接入力でもいいですし、置換機能を使ってもいいです。
完成した式を見てみると、

f:id:hamochikuwa440:20220414153603p:plain

とてもスマートですね。断然こっちのほうが良さそうに見えますが、どちらも一長一短という感じです。
先程、ガッツリ関数の不安定さを紹介しましたが、こちらは、使いにくさが少しあります。参照先が固定されているので、普通の式のようにコピーして参照先を変えるような使い方はできません。それでも、今回作ったものは1人に1枚のようなデータなので、シートごとコピーする運用が見込まれます。シートをまるごとコピーして増やす場合は、名前も自動的に増えるので、今回のパターンですと、使い勝手が悪くなることは無いかもしれません。ですが、データの数が増えてくると、名前も同様に増えてきます。ゴチャゴチャしてよくわからなくならないようにしないといけません。シートを消しても名前は残るので、しっかり管理が必要です。
まあ、結局自分の使う環境、好みで使うということになります。

 

それでは、こちらの方法も下方向にオートフィルして、深夜開始【H列】と深夜終了【I列】は削除できるようになりました。

f:id:hamochikuwa440:20220414154648p:plain

さっぱりしましたね〜。さあ、もうここまでくれば、どことどこを足して、引いてと整理しながら表にしていくだけですね。
完成はこんな感じでどうでしょうか?

f:id:hamochikuwa440:20220414154905p:plain

 

【お詫びの追記】
申し訳ない。上の画像の名前横の最上段の集計は自分で検証した第5週目あたりのダミーデータも残っていて、集計されている状態です。。。確認漏れ、、、消し忘れてますわ〜。もう差し替え面倒なのでこのままで〜。こういうところ、私はダメダメなんだよな〜(笑)

ここからは、パパっと行きますね。また誰も読まない長編書いちゃってますので、、、

作る順番としては、まず最初の行を完成させ、次に1週間だけ完成させ、また次に、全体にコピーして表にします。
仕上げに最上段の一番欲しい情報欄を集計させて完成ですね。

では、

普通時間の最上段の関数式は

=G6-F6-K6-L6

ベース賃金用なので、夜勤も含みます。法定休日と残業は別にしてます。

深夜時間の最上段は

=IF((G6-H6)<H6,H6-F6,H6)

普通時間と深夜時間を比べて深夜時間が多い場合は、深夜で休憩をとったとして計算してます。

残業時間の最上段は

=IF(AND((G6-F6)>(8/24),C6=””),G6-F6-(8/24),0)

1日の普通時間が8時間を超えた場合、オーバー分を表示してます。ただし、法定休日は残業加算でなく休日加算なので除外してます。

休日時間の最上段は

=IF(C6=“”,0,G6-F6)

法定休日欄に何かしら記入が合った場合は法定休日として休日集計します。休日手当は深夜以外の関係ないので、この日の勤務時間はすべてここになります。(法律変わってなければ割増35%以上でしたよね)

週残業の集計式は

=IF(SUM(I6:I12)>(40/24),SUM(I6:I12)-(40/24),0)

1週間の普通時間の合計が40時間を超える場合、超えた分を表示してます。

【お詫びの追記 2】
たびたび申し訳ない。上の式がSUM(I6:J12)になっていて、普通時間をダブル集計してましたので、SUM(I6:I12)に修正しました。自分は使わないと適当だなぁ・・・・と反省しております。(おかしな点、質問などございましたらコメントください。)

日数のカウントは

=COUNTIFS(B6:B12,">=" & DATE(YEAR($A$1),MONTH($A$1),1),B6:B12,"<=" & DATE(YEAR($A$1),MONTH($A$1)+1,1)-1,G6:G12,">"&0)

計算月の範囲だけ計算してます。第1週目に前月が入っているので、計算で省いています。

名前横の月間集計は

=SUMIFS(I6:I47,$B$6:$B$47,">=" & DATE(YEAR($A$1),MONTH($A$1),1),$B$6:$B$47,"<=" & DATE(YEAR($A$1),MONTH($A$1)+1,1)-1)

これで横方向にフィルですね。ここの計算は日数カウントとほぼ一緒です。COUNTかSUMかの違いだけです。
また、週残業は週毎に集計してますが、ここの集計には含んでいません。普通時間を引いて残業に集計しようと思いましたが、いろいろあると思いますのでひとまずおいてあります。ここからは使いやすいように合わせてご自由に組んでくさい。

 

最後はいつも集中力がきれますな。まあ、読まれてないのでゆっくり更新しながら完成させますよ。
きっちり24時間しか計算できない使えそうで使えない表になりました。
どうでしょう?今はもう手入力せずに、日付情報つきのスキャンデータなんかが揃ってて、どれだけ長く働いてもバシッと計算できるんですかね〜。あ〜怖い、怖い(笑)

私もいつまでもバイトってわけにはいかんだろうから、仕事探さないとなぁ。まあ、バイトでも重宝されているようなのでいいですけど、、、不安定なのは、どうあっても変わらん。

そんなわけで、次は万年カレンダーを作ろうと思います(笑)(どういうわけ?(笑))



【訂正・追記】

  • 2022年5月05日
    サンプルファイルを自分のページで公開
  • 2023年5月10日
    式の名前を使う箇所でのセルの参照方法変更
  • 2023年5月11日
    サンプルファイル案内文面の削除

2024年3月31日追記
ここで作ったシートをさらに便利?!にしました。よかったら読んでいただけるとうれしいです。

 

hamo440.hatenablog.com