
VBAのクラスモジュールを使って、定時/残業の給与計算を自動化するコードを紹介していきます。Excel関数みたいに使えるので、長いコードを書くのが嫌なあなたに。
・このコードが使えるようになると...
- Excel関数みたいに使えて簡単
- クラスモジュールを覚えられる
- 社内で一目置かれる
Excelファイルのひな形ダウンロード

そしたら、まずExcelのひな形をダウンロードしてこよう。
fa-angle-double-rightExcelファイルをダウンロードfa-share-square-o
【コピペOK】Excelにクラスモジュールを設定
そしたら、クラスモジュールを設定しようか。
クラスモジュールを追加することで、Excel関数みたいに使えるから必須の作業。
クラスモジュールの作りかたは【基礎】VBAで初めてのクラスモジュールを作ってみようで設定しよう。
設定したら、下記のコードをコピペすればOK。
Option Explicit
Const MAX_REGULAR_TIME As Date = "8:00"
Public Sub timeCalc(work_start_time As Date, work_end_time As Date, _
work_break_time As Date, writing_start_cells As Range)
Dim time_calc As Date
time_calc = work_end_time - work_break_time - work_start_time
writing_start_cells = time_calc
End Sub
Public Sub regularWorkTime(total_work_time As Date, writing_start_cells As Range)
Dim regular_work_time As Date
If total_work_time < MAX_REGULAR_TIME Then
regular_work_time = total_work_time
Else
regular_work_time = MAX_REGULAR_TIME
End If
writing_start_cells = regular_work_time
End Sub
Public Sub overtimeWork(total_work_time As Date, writing_start_cells As Range)
Dim overtime As Date
If total_work_time > MAX_REGULAR_TIME Then
overtime = total_work_time - MAX_REGULAR_TIME
Else
overtime = 0
End If
writing_start_cells = overtime
End Sub
Public Sub salaryMoneyCalc(writing_start_cells As Range, regular_work_time As Date, _
regular_money_hour As Integer, over_work_time As Date, over_time_ratio As Double)
Dim regular_money_calc As Long
Dim over_time_money_calc As Long
Dim total_money As Long
Dim time_ajustment As Long
time_ajustment = 24
regular_money_calc = regular_work_time * time_ajustment * regular_money_hour
over_time_money_calc = regular_money_hour * time_ajustment * over_time_ratio * over_work_time
total_money = regular_money_calc + over_time_money_calc
writing_start_cells = total_money
End Subちなみにデータ型が時間だと給与計算ってちゃんとできないんだよね。
そこで『Public Sub salaryMoneyCalc』を使って給与計算がちゃんとできるように時間から数値に直してる。
fa-check時間→数値にするときは...
- 『24』をかけてあげればOK
- 1日は24時間だから
- ためしに『8:00』に24をかけてみよう
- 8になったら成功だよ
標準モジュール内のコードは10行でOK
標準モジュール内に書くコードは、実質10行でOK。
クラスモジュールを使うときはDimで宣言するときAsのあとに『New』がつくから注意ね。
重要なのは、10行目~13行目。
ここで、Excel関数みたいにパラメータを設定できるよ。
そしたら、このあとどうクラスモジュールを使うのか話していこうか。
Option Explicit
Public Sub SalaryCalc()
Dim salary As New SalaryClass
Dim i As Integer
For i = 5 To 34
salary.timeCalc Cells(i, 3), Cells(i, 4), Cells(2, 4), Cells(i, 5)
salary.regularWorkTime Cells(i, 5), Cells(i, 6)
salary.overtimeWork Cells(i, 5), Cells(i, 7)
salary.salaryMoneyCalc Cells(i, 8), Cells(i, 6), Cells(2, 3), Cells(i, 7), 1.25
Next i
End Subクラスモジュール【4つの使いかた】
ここから、クラスモジュールの使いかたを見ていこうか。
使いかたを覚えることで、どんなExcelファイルにも使えるようになるよ。
まずは、4つの使い道は下記。
このあとは4つの各パラメータについて話していこうか。
| 名前 | 使うところ |
| timeCalc | トータル勤務時間を計算 |
| regularWorkTime | 定時時間を計算(デフォルトは MAX"8:00") |
| overtimeWork | 残業時間を計算 |
| salaryMoneyCalc | 勤務時間から給与を計算 |
How to use #1-- timeCalc
timeCalc(work_start_time, work_end_time, work_break_time, writing_start_cells)
書きかた例)
timeCalc "8:00", "17:00", "0:45", Cells(2, 1)
timeCalc "8:00", "20:00", "1:00", Range("B1")| 名前 | 内容 | データ型 |
| work_start_time | 勤務開始時間 | Date |
| work_end_time | 勤務終了時間 | Date |
| work_break_time | 休憩時間の合計 | Date |
| writing_start_cells | 表示したいセル | Range |
How to use #2-- regularWorkTime
regularWorkTime(total_work_time, writing_start_cells)
書きかた例)
regularWorkTime "8:00", Range("B1")regularWorkTime "10:00", Cells(3, 2)
| 名前 | 内容 | データ型 |
| total_work_time | 勤務時間の合計 | Date |
| writing_start_cells | 表示したいセル | Range |
How to use #3-- overtimeWork
overtimeWork(total_work_time, writing_start_cells)
書きかた例)
overtimeWork "10:00", Range("C1")overtimeWork "9:00", Cells(2, 3)
| 名前 | 内容 | データ型 |
| total_work_time | 勤務時間の合計 | Date |
| writing_start_cells | 表示したいセル | Range |
How to use #4-- salaryMoneyCalc
salaryMoneyCalc(writing_start_cells, regular_work_time, regular_money_hour, over_work_time, over_time_ratio)
書きかた例)
salaryMoneyCalc Cells(2, 2), "8:00", 1200, "2:00", 1.25
salaryMoneyCalc Range("C1"), "8:00", 2500, "3:00", 1.25
| 名前 | 内容 | データ型 |
| writing_start_cells | 表示したいセル | Range |
| regular_work_time | 定時時間 | Date |
| regular_money_hour | 時給 | Integer |
| over_work_time | 残業時間 | Date |
| over_time_ratio | 残業の時給比率(デフォルトは "1.25") | Double |
クラスモジュールで定時・残業を簡単に自動化しよう
- timeCalc・・・勤務時間の合計
- regularWorkTime・・・定時時間の計算
- overtimeWork・・・残業時間の計算
- salaryMoneyCalc・・・給与計算
4つの使いかたを覚えて定時・残業の給与計算は簡単にできるようになろう。
クラスモジュールをコピペすれば、他のファイルでも使えるからぜひ使ってみて。
・もっとVBA学びたい人向け記事↓

