HapInS Developers Blog

HapInSが提供するエンジニアリングの情報サイト

VBA初心者でもできる勤務表作成マクロ

社内システムを取り入れている企業もありますが、勤務表をExcelで提出する企業は未だに多いかと思います。 毎月発生する作業なので、地味に面倒に感じる方も少なくないのではないでしょうか。 今回はVBAを使用し勤務表を一括入力する方法をご紹介します。

勤務表サンプル

日付や曜日は月を変更すると自動で変わるように関数が入力されている場合が多いかと思います。 まずは、お手元の勤務表に作成用シートを追加します。

シート追加

続いて、入力用のデザインやマクロ実行ボタンを好きに作成します。 今回は作成ツールとは別ブックで保存するためのファイル名、月を選択するリスト、祝日一覧を記入し作成ボタンを追加しています。

祝日は勤務表の備考欄に入力するために記載しています

それでは作成用のコードをご紹介します。 セルについてはお手元の勤務表に合わせてください。

コード一覧

  1. Sub 作成()
  2. With ThisWorkbook.Sheets(1)
  3. '一旦備考欄に空白と開始、終了、休憩時間を入力
  4. .Range("B3").Value = ThisWorkbook.Sheets(2).Range("A2")
  5. .Range("L11:L41") = ""
  6. .Range("D11:D41").Value = "9:00"
  7. .Range("E11:E41").Value = "18:00"
  8. .Range("F11:F41").Value = "1:00"
  9. '時間を入力する開始行~最終行
  10. For d = 11 To 41
  11.   'Sheet1祝日一覧の開始行~最終行 
  12. For w = 9 To 24 
  13. '祝日判定
  14. If .Cells(d, 2) = ThisWorkbook.Sheets(2).Cells(w, 2) Then
  15. .Cells(d, 4) = ""
  16. .Cells(d, 5) = ""
  17. .Cells(d, 6) = ""
  18. .Cells(d, 12).Value = ThisWorkbook.Sheets(2).Cells(w, 1)
  19. End If
  20. '土日判定
  21. If .Cells(d, 3) = "土" Or .Cells(d, 3) = "日" Then
  22. .Cells(d, 4) = ""
  23. .Cells(d, 5) = ""
  24. .Cells(d, 6) = ""
  25. End If
  26. '月の最終日判定
  27. If .Cells(d, 3) = "" Then
  28. .Cells(d, 4) = ""
  29. .Cells(d, 5) = ""
  30. .Cells(d, 6) = ""
  31. End If
  32. Next w
  33. Next d
  34. 'シートを新しいブックへコピーする
  35. .Copy
  36. '1番左のシート名を変更
  37. Sheets(1).Name = "勤務表(2023年" & ThisWorkbook.Sheets(2).Range("A2") & "月度)"
  38. '新しく作成したブックを名前を付けて保存
  39. ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & ThisWorkbook.Sheets(2).Range("A6")
  40. End With
  41. End Sub

実行すると

マクロ実行後

  • ・開始、終了、休憩時間を入力
  • ・土日には空白を入力
  • ・祝日には空白と備考欄入力
  • ・シート名、ファイル名に当月を反映

することが出来ました! あとは残業時間など細かい修正だけすればOKです。

別ブックで作成した勤務表はツール同一フォルダ内に保存されます

簡単なコードしか使用していないので、VBA初心者の方でも簡単に作成することが出来ます。 VBAの学習の手始めとしても丁度良いかと思うので、参考にしてみてください!