はじめに

これから何回かに分けてExcelで出勤簿を作っていきたいと思います。
Excelで出勤簿や勤務シフトを作成する人は多いのではないでしょうか? ここでは簡単な出勤簿を作り徐々に機能追加していく事で実用的な出勤簿を作ってみます。
出勤簿の仕様
勤務状況を表にしたものは、勤務表、勤務シフト表、出勤簿、勤怠管理表など色々な呼び方があるようです。
ここでは、勤務表、勤務シフト表は、予定を記録するもの。
出勤簿、勤怠管理表は勤務実績を記録するものとしておきます。
これから作るプログラムは出勤簿なので、勤務実績を記録する表になります。
これまでいくつかの会社の出勤簿を見てきましたが、同じような値を扱うものの全く同じものはありませんでした。
これから作る出勤簿に関しては給与計算に必要な値を得られるようしてみました。
この他に、交通費、弁当、特別休暇などを設ける場合もあるようです。
更に勤務パターンに関しても日勤のみの会社もあれば、夜勤やパートも含めると10種類以上存在する会社もあります。 また、締日についても会社によって様々です。
勤務状況を表にしたものは、勤務表、勤務シフト表、出勤簿、勤怠管理表など色々な呼び方があるようです。
ここでは、勤務表、勤務シフト表は、予定を記録するもの。
出勤簿、勤怠管理表は勤務実績を記録するものとしておきます。
これから作るプログラムは出勤簿なので、勤務実績を記録する表になります。
これまでいくつかの会社の出勤簿を見てきましたが、同じような値を扱うものの全く同じものはありませんでした。
これから作る出勤簿に関しては給与計算に必要な値を得られるようしてみました。
この他に、交通費、弁当、特別休暇などを設ける場合もあるようです。
更に勤務パターンに関しても日勤のみの会社もあれば、夜勤やパートも含めると10種類以上存在する会社もあります。 また、締日についても会社によって様々です。
勤務パターンは例えば以下のような感じになります。

今回作る出勤簿に関しては以下のような項目を設けています。
日付、曜日
勤務区分 (勤務の種類。日勤、夜勤など)
出勤時間 (時刻表示)
退勤時間 (時刻表示)
休憩時間 (時間数表示)
実働時間 (時間数表示 数式マクロで計算)
欠勤時間 (時間数表示)
有給時間 (時間数表示)
深夜業時間 (時間数表示)
残業時間 (時間数表示)
備考
出勤簿では、時刻表示と時間数表示を分けています。
時刻表示である出勤、退勤時間に関しては、8時30分を 8:30 としています。
また、それ以外は時間数表示で、休憩時間~残業時間までは、時間数で、1時間は、1.00 と小数第2位の数値とします。
また、ローカルルールで、分の単位は、0, 15, 30, 45 の15分刻みを最小単位として扱う事とします。
これにより、20分が 0,3333,,h となる事が無くなり計算しやすく分かりやすい表示に出来ます。
各時間項目の説明

実働時間は、退勤時間 – 出勤時間 で時間数を計算し、そこから更に、休憩時間、欠勤時間を引いた値となります。 欠勤時間とは、有給を伴わない遅刻や早退です。
有給時間は、会社に出勤していなくても実働時間に含まれます。
ただし、交通費などを設定する場合は、費用を負担しないように設定する必要があるでしょう。
(交通費に関しては、今回は省略しています。)
深夜業は、原則22:00~翌5:00までの間に勤務した場合の割増分(25%以上)になります。
同じく残業は、割増分に相当する時間数を入力できるようにしています。
深夜業、残業ともに実働時間に含まれる形を想定しています。
尚、運用の方法がご自身の環境で適宜変更してください。場合によってはプログラムの変更が必要になる場合もあります。
数式マクロの設定
VBAのプログラムの前に、数式マクロで処理できるものを設定します。
日付の数式マクロ
日付に関しては、数式マクロを利用して表示させています。
B1セルに「2024年1月度」と表示されていますが中身の値は “2024/1/1” となっています。
これは、セルの書式設定をユーザー定義で以下の様に変更しています。
yyyy”年”m”月度”;@

日付は、B1セルの値を基準にして決定しています。
締日の設定
出勤簿の締日は、会社によって異なると思いますが、この出勤簿ではB5 およびB32~B35セルを変更すれば締日を変更できます。
今回は20日締めにしましたので、第1日目のB5 セルの数式マクロは、以下の様になります。
B5 セル =DATE(YEAR(B1),MONTH(B1)-1,21)
また、B32~B35セルに関しては、小の月などで空白となる可能性がありますので計算で求めて表示を決定しています。
B32セル =IF(DAY($B$31+1)>20,””,$B$31+1)
B33セル =IF(DAY($B$31+2)>20,””,$B$31+1)
B34セル =IF(DAY($B$31+3)>20,””,$B$31+1)
B35セル =IF(DAY($B$31+4)>20,””,$B$31+1)
実働時間の数式マクロ
実働時間は、前に説明した通り、退勤時間 – 出勤時間で時間数を計算し、そこから休憩時間、欠勤時間を引いた値となります。
H5セル =(F5-E5)*24-G5-I5
以降、行数が変化していきます。
出勤時間と退勤時間の時刻表示(セルの書式設定)
出勤時間と退勤時間の時刻表示はセルの書式設定で時刻からユーザー定義にして以下の様に設定しています。
[h] とすると0時を超えた値が、25時などの表示となります。
[h]:mm;@

勤務パターンシート
勤務パターンシートは以下の様になります。

こちらは、出勤簿の勤務区分~残業までを抜き出した形になります。
ここに勤務のパターンをセットしておき、行単位で指定した日に貼り付ける形で出勤簿をつけていきます。
最後に
出勤簿を作る【準備編】は、ここまでとします。まだVBAプログラムは書いていませんが、手作業であれば出勤簿を作ることもできます。ただ、やってみると結構面倒なので次回から徐々に機能を追加していきます。
今回の出勤簿では、B1セルの月を変化させると日付と曜日が変わるはずです。問題ないか確認してみましょう。
B1のみ日付変更すれば、その月の出勤簿の形が出来上がるので、これだけでも日付と曜日は自動で変化するようになります。
次回はユーザーフォームを使わずに勤務区分をドロップダウンさせて始業時間、退勤時間などをセットできるようにプログラムします。
出勤簿を作る【準備編】
出勤簿をつくる (1)
出勤簿をつくる (2)
コメント