社内システムを取り入れている企業もありますが、勤務表をExcelで提出する企業は未だに多いかと思います。 毎月発生する作業なので、地味に面倒に感じる方も少なくないのではないでしょうか。 今回はVBAを使用し勤務表を一括入力する方法をご紹介します。
日付や曜日は月を変更すると自動で変わるように関数が入力されている場合が多いかと思います。 まずは、お手元の勤務表に作成用シートを追加します。
続いて、入力用のデザインやマクロ実行ボタンを好きに作成します。 今回は作成ツールとは別ブックで保存するためのファイル名、月を選択するリスト、祝日一覧を記入し作成ボタンを追加しています。
それでは作成用のコードをご紹介します。 セルについてはお手元の勤務表に合わせてください。
コード一覧
- Sub 作成()
- With ThisWorkbook.Sheets(1)
- '一旦備考欄に空白と開始、終了、休憩時間を入力
- .Range("B3").Value = ThisWorkbook.Sheets(2).Range("A2")
- .Range("L11:L41") = ""
- .Range("D11:D41").Value = "9:00"
- .Range("E11:E41").Value = "18:00"
- .Range("F11:F41").Value = "1:00"
- '時間を入力する開始行~最終行
- For d = 11 To 41
- 'Sheet1祝日一覧の開始行~最終行
- For w = 9 To 24
- '祝日判定
- If .Cells(d, 2) = ThisWorkbook.Sheets(2).Cells(w, 2) Then
- .Cells(d, 4) = ""
- .Cells(d, 5) = ""
- .Cells(d, 6) = ""
- .Cells(d, 12).Value = ThisWorkbook.Sheets(2).Cells(w, 1)
- End If
- '土日判定
- If .Cells(d, 3) = "土" Or .Cells(d, 3) = "日" Then
- .Cells(d, 4) = ""
- .Cells(d, 5) = ""
- .Cells(d, 6) = ""
- End If
- '月の最終日判定
- If .Cells(d, 3) = "" Then
- .Cells(d, 4) = ""
- .Cells(d, 5) = ""
- .Cells(d, 6) = ""
- End If
- Next w
- Next d
- 'シートを新しいブックへコピーする
- .Copy
- '1番左のシート名を変更
- Sheets(1).Name = "勤務表(2023年" & ThisWorkbook.Sheets(2).Range("A2") & "月度)"
- '新しく作成したブックを名前を付けて保存
- ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & ThisWorkbook.Sheets(2).Range("A6")
- End With
- End Sub
実行すると
- ・開始、終了、休憩時間を入力
- ・土日には空白を入力
- ・祝日には空白と備考欄入力
- ・シート名、ファイル名に当月を反映
することが出来ました! あとは残業時間など細かい修正だけすればOKです。
簡単なコードしか使用していないので、VBA初心者の方でも簡単に作成することが出来ます。 VBAの学習の手始めとしても丁度良いかと思うので、参考にしてみてください!