見出し画像

コピペで簡単に業務効率化!メールに報告期間の日付を自動で入力する方法【Outlook VBA】

週報や月報など報告メールによっては「開始日の日付」と「終了日の日付」が必要になるものもありますよね。2つの日付を入力するのはなかなか面倒…。

そこで今回は、週報などで開始日と終了日が必要になる際に便利な「今日の日付」と「指定した日数分前の日付」を自動で入力してくれるマクロを紹介します。

今回は週報を例に作成していきますが、さまざまなパターンの日付の表記にも対応できるようなマクロにしてみました。

コピペするだけで簡単にマクロが作成できるので、プログラミング初心者の方もぜひ挑戦してみてください。

01.開発タブの表示【事前準備】

まずはマクロ作成の基本、「開発」タブを表示させていきます。

1)「ファイル」を開いて「オプション」を選択します。

2)「リボンのユーザー設定」を選択し、「開発」にチェックを入れて「OK」をクリックします。

これで「開発」タブが表示されるようになりました。

02.メールテンプレートの作成

ここでは、メールのテンプレートを作成していきます。

1)普段通りに「新しいメール」から、作成したいメールを作成します。

2)作成したテンプレートを以下の通りに変更してください。

①署名をデフォルトで設定している場合は署名を削除
②日付を以下の対応する文字列に変更
 西暦  →  yyyy
 開始日の月   →  m
 開始日の日にち →  d
 開始日の曜日  →  (w)

 今日の月   →  mm
 今日の日にち →  dd
 今日の曜日  →  (ww)

⚠️年をまたいだ日付の入力は想定していないので、年をまたぐ場合は手動で変更してください。

3)「ファイル」をクリックして「名前をつけて保存」を選択します。

4)「ファイル名」を好きな名前に設定して、「ファイルの種類」を「Outlookテンプレート(*.oft)」に変更してから「保存」をクリックします。

⚠️ファイルのパスはマクロを作成する際に使用します。保存した場所を忘れないようにしてください。

これでメールのテンプレートの作成が完了しました。

03.マクロの作成

続いてマクロを作成していきます。

1)「開発」タブを開いて、「マクロ」内の「マクロ」をクリックしてください。

2)「マクロ名」に内容が分かりやすい名前を入力して「作成」をクリックします。

3)「Microsoft Visual Basic for Applications」の画面が開きます。

4)以下のコードをメモ帳か何かにコピペして、「”★フォルダパス★\テンプレート名.oft”」の部分をメールのテンプレートを格納したフォルダパスとテンプレート名に変更してください。

🌟エクスプローラーでメールのテンプレートを選択した状態で「ホーム」タブ内の「パスのコピー」をクリックすることで一瞬でファイル名までコピーできます。

Dim Temp As Outlook.MailItem
Dim WeekD As String
Dim TimeDate As Date: TimeDate = Now
Dim a As Integer: a = CInt(Day(TimeDate))

'何日前の日付にしたいかを選択
Dim DayAgo As Integer: DayAgo = 4

'テンプレートを開く
    Set Temp = Application.CreateItemFromTemplate("★フォルダパス★\テンプレート名.oft")
    Temp.Display

'今日の曜日を取得
    WeekD = WeekdayName(Weekday(Date))
    WeekDa = WeekdayName(Weekday(Date - DayAgo))
    
'曜日を削除
    WeekD = Replace(WeekD, "曜日", "")
    WeekDa = Replace(WeekDa, "曜日", "")

'件名の日付を変更
    Temp.Subject = Replace(Temp.Subject, "yyyy", Year(Now))
    Temp.Subject = Replace(Temp.Subject, "mm", Month(Now))
    Temp.Subject = Replace(Temp.Subject, "dd", Day(Now))
    Temp.Subject = Replace(Temp.Subject, "ww", WeekD)

    '指定した日数日分前の日付に変更
        Temp.Subject = Replace(Temp.Subject, "d", Day(Now - DayAgo))

        If a <= DayAgo Then
            Temp.Subject = Replace(Temp.Subject, "m", Month(Now) - 1)
        Else
            Temp.Subject = Replace(Temp.Subject, "m", Month(Now))
        End If
        Temp.Subject = Replace(Temp.Subject, "(w)", "(" + WeekDa + ")")
        
'本文の日付を変更
    Temp.Body = Replace(Temp.Body, "yyyy", Year(Now))
    Temp.Body = Replace(Temp.Body, "mm", Month(Now))
    Temp.Body = Replace(Temp.Body, "dd", Day(Now))
    Temp.Body = Replace(Temp.Body, "ww", WeekD)

    '指定した日数日分前の日付に変更
        Temp.Body = Replace(Temp.Body, "d", Day(Now - DayAgo))

        If a <= DayAgo Then
            Temp.Body = Replace(Temp.Body, "m", Month(Now) - 1)
        Else
            Temp.Body = Replace(Temp.Body, "m", Month(Now))
        End If
        Temp.Body = Replace(Temp.Body, "(w)", "(" + WeekDa + ")")

⚠️今回、始まりの日数は5日前になるように設定しています。変更したい場合は以下のコードの「4」の部分を「表示させたい日数ー1」の数字に変更してご利用ください。

'何日前の日付にしたいかを選択
Dim DayAgo As Integer: DayAgo = 4

5)「Sub マクロ名()」と「End Sub」の間に4)で編集したコードをコピー&ペーストします。

6)「ツール」メニューの中の「参照設定」を開きます。

7)「Microsoft Outlook xx.x Object Library」にチェックを入れて「OK」をクリックしてください。

これでマクロの作成が完了しました。この画面は右上のバツをクリックして閉じてしまって問題ありません。

04.タブにマクロを表示

ここでは、作成したマクロを以下のように新規で作成したタブ内に表示していきます。「週報」というアイコンをクリックすることで、今日の日付と指定した日数分前の日付が入力されたメールが表示されるようになります。

⚠️タブに表示したくないという方は、「開発」タブの「マクロ」内からマクロ名をクリックすることで実行が可能です。

⚠️ここでは新規で「テンプレート」タブを作成していきますが、既存のタブ内に追加したい方は必要な部分だけ実施してください。

1)「ファイル」から「オプション」を開きます。

2)「リボンのユーザー設定」を開き、「新しいタブ」を選択します。

3)「新しいタブ(ユーザー設定)」内に作成された「新しいグループ(ユーザー設定)」を選択して「名前の変更」をクリックします。

4)以下の「報告書」と表示されている部分に表示したい文字を「表示名」に入力して「OK」をクリックします。

5)「新しいタブ(ユーザー設定)」を選択して「名前の変更」をクリックします。

6)「テンプレート」と表示されている部分に表示したい文字を「表示名」に入力して「OK」をクリックします。

7)「コマンドの選択」から「マクロ」を選択します。

8)マクロを表示したいグループ(ここでいう「報告書」)を選択してから、作成したマクロを選択して「追加」をクリックします。

9)追加されたマクロを選択して「名前の変更」をクリックします。

10)顔のアイコンのところに表示したい「アイコン」を選択して、「週報」と表示されている部分に表示したい文字を「表示名」に入力して「OK」をクリックします。

11)「OK」をクリックします。

これで「テンプレート」タブ内にマクロを実行するアイコンを表示することができました。アイコンをクリックするとメールのテンプレートが表示されます。

このメールに実施内容を入力して送信すればおしまいです。早く帰宅しましょう!

こんな機能が知りたい!というコメントなどをいただけたらゆくゆく記事にしていくかもしれません☻