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学びたい人向け記事↓