【Excelマクロ】給与計算のおけるマクロの検討

勤怠の計算は「毎月の悩みの種」

通常の会社の業務として、給与計算は欠かせないものですが、給与計算を行う上で、勤怠計算も欠かせないものとなります。

勤怠計算については、システムで行なっている会社も多いと思いますが、Excelで勤怠計算した上で、システム上に入力している、もしくは、Excelで管理しているなど、まだまだExcelを現役で使っていることが多いと感じています。

「毎月手入力で時間計算をしていて大変」「関数では限界がある」と感じている方も少なくありません。

「VBAマクロを使って勤怠計算を自動化する」方法について、見ていきましょう。

勤怠データの基本構造と前提条件

まずは、どのような勤怠データを扱うのかを整理しておきましょう。

一般的な勤怠表の例

日付出勤時刻退勤時刻休憩時間勤務時間備考
4/109:0018:001:008:00

このように、日付ごとに出勤時刻・退勤時刻・休憩時間が記録されており、最終的には勤務時間を計算します。

勤怠マクロの目的

勤怠で必要な情報としては、下記の情報です。

  • 毎日の勤務時間を自動計算
  • 月間合計の勤務時間を集計
  • 遅刻・早退・欠勤などを自動で分類

Excelでの時間計算の基本

Excelで時間を扱うポイント

Excelでは時刻データは「日付+時間」のシリアル値として扱われます。

このシリアル値の理解をしなくても、なんとなく計算はできてしまいますが、シリアル値を理解した方が正確に計算をすることができます。

シリアル値とは「1日24時間を”1″」として、次のように見ています。

  • 1 = 1日 = 24時間
  • 0.5 = 12時間
  • 1時間 = 約0.041666…(1時間÷24時間)

つまり、18:00 - 09:000.375(9時間÷24時間)として扱われるのです。

勤務時間を計算する基本マクロ

Sub Work_hour()

    Dim i As Long
    Dim startTime As Date
    Dim endTime As Date
    Dim restTime As Date
    Dim workTime As Double

  '出勤時間などを変数に入れる
    For i = 2 To 32 ' 2行目から最終行まで繰り返し
        startTime = Cells(i, 2).Value ' 出勤時刻
        endTime = Cells(i, 3).Value   ' 退勤時刻
        restTime = Cells(i, 4).Value  ' 休憩時間

    '時刻が入っているかを確認し、勤怠時間を計算する
        If IsDate(startTime) And IsDate(endTime) And IsDate(restTime) Then
            workTime = (endTime - startTime - restTime) * 24 ' 時間換算
            Cells(i, 5).Value = Format(workTime,"0.00") ' 勤務時間として表示
        End If
    Next i

End Sub

このマクロでは、各行の出勤・退勤・休憩時間から勤務時間を自動で算出し、E列(5列目)に表示します。

基本的には最大31日になるため、For構文では2行目〜32行目の31行分を処理するようになっています。

また、それぞれの変数に入れられたものが、日付や時間になるかをIsDate関数で確認した上で、計算をしています。

遅刻や早退をチェックするマクロ

Sub late_early()

    Dim i As Long

    For i = 2 To 32

    '出勤時間が9:00より前か確認
        If Cells(i, 2).Value > TimeValue("09:00") Then
            Cells(i, 6).Value = "遅刻"
        End If

    '退勤時間が18:00より後か確認
        If Cells(i, 3).Value < TimeValue("18:00") Then
      If Cells(i, 6).Value = "遅刻" Then
              Cells(i, 6).Value = Cells(i, 6).Value & "・早退"
      Else
        Cells(i, 6).Value = Cells(i, 6).Value & "早退"
      End If
        End If

    Next i

End Sub

F列に遅刻の時には「遅刻」、早退の場合には「早退」、両方の場合には、「遅刻・早退」といった情報を付け加えることができます。

月間合計勤務時間を計算するマクロ

Sub Montly_total()

    Dim totalTime As Double
    Dim i As Long

    For i = 2 To 32
        totalTime = totalTime + Cells(i, 5).Value
    Next i

    Cells(33, 5).Value = "合計"
    Cells(33, 6).Value = Format(totalTime, "0.00") & " 時間"

End Sub

totalTimeという変数に、E列(5列目)の値を順番に足していく、という動作をした上で、合計されたものをF33に入れるという内容です。

まとめ

時間の計算は Date 型や Double 型を活用し、エラー回避のために IsDate を併用するのが安全です。

「まず1日分から始める」「エラーが出たら原因を追ってみる」そんな一歩から進めていくと、安全に進めることができます。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール