日報ポータル作成【第1回】

日報は好きですか?

私は正直、あまり好きではないです…

今回は、そんな日報に関連する作業を少しでも楽にするためにマクロを作っていきます。

もちろん、日報の中身を考えることは非定型作業なので、自動化できません…

目次(クリックするとジャンプします)

日報関連の作業を洗い出す

私の場合、以下の作業があります。

始業時にすること
  • 始業時間と業務予定を上司にメールで連絡

終業時にすること
  • 終業時間と残業時間、業務実績を上司にメールで連絡
  • 始業時間と終業時間を社内イントラ上の勤怠管理システムへ入力
  • 勤務時間と業務実績を社内イントラ上の工数管理システムへ入力
定型作業
  • 上司へメール連絡
  • 社内システムへの入力

作りたいマクロのイメージ

  • 必要な項目(始業時間、終業時間、業務内容)をExcelのセルに入力する
  • ボタンを押すと始業・終業時の作業を実行できる

ということで、シートの構成は下図のように作ってみました。

そして、Excel VBAのコードは以下のように作成しました。

Sub main()
  Dim ButtonRow, ButtonCol As Long
  Dim ButtonName As String
  Dim hiduke, shigyou, shugyou, kinmu As Date
  Dim youbi As String

'---押したボタンの位置を検出し、ボタン名および入力内容を取得します---
  With ActiveSheet.Shapes(Application.Caller).TopLeftCell
    ButtonRow = .Row
    ButtonCol = .Column
  End With

  ButtonName = Cells(4, ButtonCol).Value

  hiduke = Cells(ButtonRow, 2).Value
  youbi = Cells(ButtonRow, 3).Value
  shigyou = Cells(ButtonRow, 4).Value
  shugyou = Cells(ButtonRow, 5).Value
  kinmu = Cells(ButtonRow, 7).Value

'---入力内容に漏れがあれば中断します---
  If CStr(shigyou) = "" Then
    MsgBox("始業時間を入力してください")
    Exit Sub
  ElseIf CStr(shugyou) = "" Then
    MsgBox("終業時間を入力してください")
    Exit Sub
 End If

'---押したボタンに応じて作業を実行します---
  Select Case ButtonName
    Case "始業メール"
      Call CreateMail(ButtonRow, "start_mail")  '第2回で紹介します
    Case "終業メール"
      Call CreateMail(ButtonRow, "end_mail")
    Case "勤怠入力"
      Call InputKintai(ButtonRow)  '第3回で紹介します
    Case "工数入力"
      Call InputKousu(ButtonRow)
  End Select

End Sub
ポイント①

以下のコードをボタン(図形)に登録することで、

押されたボタンの位置(行・列)を取得することができます。

ボタンが大量に並ぶため見た目は煩雑ですが、今回は直感的な操作を求めてこちらの仕様を採用しました。

With ActiveSheet.Shapes(Application.Caller).TopLeftCell
  ButtonRow = .Row
  ButtonCol = .Column
End With
ポイント②

Excel VBAの条件分岐はIf文が有名ですが、複数に分岐させる際はSelect Caseもおすすめです。

コードがすっきり見やすくなります。

Select Case ButtonName
  Case "始業メール"
    Call CreateMail(ButtonRow, "start_mail")  'ButtonName="始業メール"ならば実行
  Case "終業メール"
    Call CreateMail(ButtonRow, "end_mail")    'ButtonName="終業メール"ならば実行
  Case "勤怠入力"
    Call InputKintai(ButtonRow)               'ButtonName="勤怠入力"ならば実行
  Case "工数入力"
    Call InputKousu(ButtonRow)                'ButtonName="工数入力"ならば実行
End Select

今回は日報ポータルの大枠を作成しました。

次回からは、メールの自動作成や社内システムへの自動入力を作っていきます。