課題・悩み「Outlookでメールに今日の日付をワンクリックで入力したい」
解決策「ワンクリックでOutlookのメールに今日の日付と曜日を入力するVBAマクロのコード」を解説
メール作成時に本日の日付や曜日を入力する場面は多くあります。
Excelなら今日の日付を入力するショートカットキーがありますが、Outlookにはないため、日付入力の際にいちいち日付を確認するのは面倒。
そこで、今日の日付と曜日を入力するVBAマクロのコードを作成しました。
コピペすればすぐに使えるようになります。
【ワンクリックでOutlookのメールに今日の日付と曜日を入力するVBAマクロのコード】を解説しています。
Outlookでメールと添付ファイルをフォルダ内に保存するVBAマクロの使い方
このコードは、現在アクティブなメールアイテム内で選択されたテキストを、現在の日付と曜日(例:2/7(水))で置換します。
Format関数を使って日付の形式を設定し、WeekdayName関数で曜日の名前を取得しています。
使用する際は、メールを編集中にこのマクロを実行してください。
なお、Outlookのマクロ設定で「マクロをすべて無効にする」が選択されていると、マクロは動作しません。
設定を「通知を表示してマクロを有効または無効にする」または「すべてのマクロを有効にする」に変更する必要があります(セキュリティ上の理由から、「すべてのマクロを有効にする」の選択は推奨されません)
Outlookを開く
Outlookを開きます。
VBAエディタを開く
「Alt + F11」キーを押して、VBAエディターを開きます。
プロジェクトを探す
「プロジェクト」パネルで、「Project1」(Outlookセッション)を見つけます。
新規モジュールを作る
「挿入」メニューから「モジュール」を選択し、新しいモジュールを作成します。
コードを貼りつける
作成したモジュールに以下のコードを貼り付けます。
Sub 日付の入力()
Dim objMail As Object
Dim objInspector As Inspector
Dim objWordDocument As Word.Document
Dim objSelection As Word.Selection
Dim strDate As String
' 現在アクティブなメールアイテムを取得
Set objInspector = Application.ActiveInspector
If Not objInspector Is Nothing Then
If TypeOf objInspector.CurrentItem Is MailItem Then
Set objMail = objInspector.CurrentItem
' メールの本文をWordオブジェクトとして取得
Set objWordDocument = objInspector.WordEditor
Set objSelection = objWordDocument.Application.Selection
' 日付と曜日の文字列を生成
strDate = Format(Now, "m/d") & "(" & WeekdayName(Weekday(Now), True, vbMonday) & ")"
' 選択したテキストを日付で置換
objSelection.TypeText Text:=strDate
End If
End If
End Sub
Outlookでメールと添付ファイルをフォルダ内に保存するVBAマクロのコード
このVBAマクロは、Outlookでアクティブなメールアイテムの本文中に、現在の日付と曜日を挿入する機能を持っています。
Option Explicit
Sub 日付の入力()
Dim objMail As Object
Dim objInspector As Inspector
Dim objWordDocument As Word.Document
Dim objSelection As Word.Selection
Dim strDate As String
' 現在アクティブなメールアイテムを取得します。
Set objInspector = Application.ActiveInspector
' アクティブなインスペクタが存在する場合
If Not objInspector Is Nothing Then
' インスペクタの現在のアイテムがメールアイテムである場合
If TypeOf objInspector.CurrentItem Is MailItem Then
' 現在のメールアイテムを取得します。
Set objMail = objInspector.CurrentItem
' メールの本文をWordオブジェクトとして取得します。
Set objWordDocument = objInspector.WordEditor
' Wordオブジェクトの選択範囲を取得します。
Set objSelection = objWordDocument.Application.Selection
' 日付と曜日の文字列を生成します。ここで、Format関数を使って日付を "月/日" の形式にし、
' WeekdayName関数で現在の曜日の名前を取得します。Weekday関数の第二引数に True を設定することで、
' 週の開始を月曜日と定義し、曜日が正しく表示されます。
strDate = Format(Now, "m/d") & "(" & WeekdayName(Weekday(Now), True) & ")"
' 選択したテキストを日付と曜日の文字列で置換します。
objSelection.TypeText Text:=strDate
End If
End If
End Sub
全体の処理の概要
アクティブなOutlookのメールアイテムを取得します。
メールの本文をWordのドキュメントオブジェクトとして操作します。
現在の日付と曜日の文字列を生成します。
選択中のテキスト位置に、生成した日付と曜日の文字列を挿入します。
各処理の詳細
アクティブなメールアイテムの取得
現在Outlookで開かれているアクティブなメールを取得します。
Set objInspector = Application.ActiveInspector
メール本文のWordドキュメントとしての取得
アクティブなメールの本文をWordドキュメントオブジェクトとして操作する準備をします。
Set objWordDocument = objInspector.WordEditor
選択範囲の取得
Wordドキュメントの中でユーザーが選択しているテキストの範囲を特定します。
Set objSelection = objWordDocument.Application.Selection
日付と曜日の文字列の生成
現在の日付と曜日を含む文字列を生成します。
strDate = Format(Now, "m/d") & "(" & WeekdayName(Weekday(Now), True) & ")"
文字列の挿入
選択された範囲に日付と曜日の文字列を挿入します。
objSelection.TypeText Text:=strDate
注意点
データ量が多い場合の処理時間
大量のデータを扱う場合、特にこのマクロでは大きな問題はありませんが、Wordオブジェクトを操作する際は、処理に時間がかかることがあります。
操作の取り消し
VBAマクロで実行した操作は、一度実行すると元に戻すことが難しい場合があります。
特にこのマクロでは、挿入されたテキストを手動で削除する必要があります。
必要な環境設定
参照設定
このマクロを実行するには、OutlookとWordのオブジェクトライブラリへの参照設定が必要です。
VBAエディタで「ツール」→「参照設定」から、「Microsoft Outlook xx.0 Object Library」と「Microsoft Word xx.0 Object Library」にチェックを入れてください(xxはバージョン番号です)。
コードのカスタマイズ箇所
環境に合わせて変更する可能性がある箇所は主に、日付の形式や曜日の表示に関する部分です。
以下に、変更が必要になる可能性がある箇所とその解説をまとめました。
日付の形式
日付の表示形式は、地域や個人の好みによって異なる場合があります。
例えば、アメリカでは「月/日」の形式が一般的ですが、ヨーロッパの多くの国では「日/月」の形式を好むかもしれません。
この部分を自分の好みや地域の標準に合わせて変更することができます。
Format(Now, "m/d")
日付の形式を「日/月」に変更する場合
strDate = Format(Now, "d/m") & "(" & WeekdayName(Weekday(Now), True) & ")"
曜日の表示
曜日の名前を英語で表示していますが、これを自国の言語に変更したい場合は、WeekdayName関数を使わずに、曜日の名前を自分で定義することになります。
また、週の開始日を変更したい場合は、Weekday関数の第二引数を変更します。
WeekdayName(Weekday(Now), True)
曜日を自国の言語で表示する場合(例:日本語)
ここでは、WeekdayName関数を使用せずに、曜日の日本語名を直接指定する方法を示します。週の開始日を日曜日としています(Weekday関数の第二引数を省略すると、デフォルトで日曜日が週の開始日となります)。
Dim dayNames As Variant
dayNames = Array("日", "月", "火", "水", "木", "金", "土")
strDate = Format(Now, "d/m") & "(" & dayNames(Weekday(Now) - 1) & ")"
まとめ:VBAマクロでメール作成の時短
VBAマクロでメール作成を時短して業務効率アップ。
Outlookの作業を自動化する便利なVBAマクロのコードの一覧です。
コメント