情報システム

有給管理をExcelVBAで簡略化

有給の管理って大変ですよねー!

入社してから、半年後に発生。そしてそのあとは、1年ごとに勤務日数や勤務時間によって発生日数はことなります。

VBAで簡単管理表作成

有給って入社日から考えて発生させないといけないけど、管理が大変だし2年の有効期間の管理も大変💦

有給の発生なんて人によって違うし、管理するのは本当に大変です…

ExcelVBAで管理を楽にしてみる

本格的な管理をする場合は、勤怠履歴から勤務日数や勤務時間から日数を算出する方がいいです。

ただ、今回は有給のみを管理するための表として使う目的です。

まずは、表から

名前入社日有効有給日数1回目2回目3回目4回目
有給発生日発生使用有給発生日発生使用有給発生日発生使用有給発生日発生使用
A2017/1/1252017/7/1100102018/7/1110112019/7/1120122020/7/1130
B2019/12/11102020/6/11100102021/6/110002022/6/110002023/6/1100
C2017/12/102018/6/13032019/6/10002020/6/10002021/6/100
D2019/9/2122020/3/212022021/3/210002022/3/210002023/3/2100
E2020/7/2732021/1/273032022/1/270002023/1/270002024/1/2700
F2020/6/1102020/12/1100102021/12/10002022/12/10002023/12/100
G2021/5/102021/11/1100102022/11/10002023/11/10002024/11/100
H2018/7/102019/1/16062020/1/10002021/1/10002022/1/100
I2018/10/2102019/4/212022020/4/210002021/4/210002022/4/2100
J2019/7/2142020/1/214042021/1/210002022/1/210002023/1/2100
K2018/10/2102019/4/213032020/4/210002021/4/210002022/4/2100
L2020/12/2702021/6/274042022/6/270002023/6/270002024/6/2700
M2019/11/2132020/5/213032021/5/210002022/5/210002023/5/2100
N2020/12/702021/6/76062022/6/70002023/6/70002024/6/700
O2021/4/502021/10/55052022/10/50002023/10/50002024/10/500
P2020/6/1102020/12/1100102021/12/10002022/12/10002023/12/100
Q2020/8/122021/2/12022022/2/10002023/2/10002024/2/100
R2020/8/122021/2/12022022/2/10002023/2/10002024/2/100
S2020/8/122021/2/12022022/2/10002023/2/10002024/2/100
T2021/5/2502021/11/251012022/11/250002023/11/250002024/11/2500

すいません、Webでの表でうまく張り付きませんでした😢

なので画像を添付します。

こんな感じの表で管理しようと思います。

Excel VBAのコード

Excel VBAのコードをそのまま公開しますよ

1つ1つを書くより、VBAを知らなくても使えるようにするためにコードをそのまま公開しておきます。

Sub 有給計算()

With Worksheets("管理表")
    最終行 = .Cells(Rows.Count, 1).End(xlUp).Row
    最終列 = .Cells(4, .Columns.Count).End(xlToLeft).Column
    現在日付 = Date

    
    For i = 5 To 最終行
        入社日 = .Cells(i, 2)
         有給残数取得 = 0
        
        '1回目から取得
        For k = 4 To 最終列
            有給発生日 = .Cells(i, k)
            有給失効日 = DateAdd("yyyy", 2, 有給発生日)
            If 有給失効日 <= 現在日付 Then
                '有給執行処理
                For l = 0 To 3
                    .Cells(i, k + l).Interior.ColorIndex = 16
                Next l
            ElseIf 現在日付 < 有給発生日 Then
                '未来未発生処理
                For l = 0 To 3
                    .Cells(i, k + l).Interior.ColorIndex = 16
                Next l
            Else
                '有給有効期間処理
                有給残数取得 = 有給残数取得 + .Cells(i, k + 3)
                .Cells(i, 3) = 有給残数取得
                For l = 0 To 3
                    .Cells(i, k + l).Interior.ColorIndex = 0
                Next l
            End If
            k = k + 3
        Next k
    Next i
End With

End Sub

Excelシートの関数で、入社日から1回目、2回目以降、関数で発生日を表示しています。

VBAでは、この有給発生日を取得して、有給失効日や現在日付と比較して処理を分岐させています。

プログラミングは、繰り返しと条件分岐

日本語の変数でトラブル経験はなし

シートに実行ボタンをつくる

開発タブの中に挿入メニューがあり、左上のアイテムがボタンになっていますので、クリックします。

実行するマクロをクックしてOKボタンを押下します。

これで完了です☺

-情報システム

© 2021 ごろう@縁紡ぐ