2022年02月20日
メール下書き
会社で使うExcel。いつの間にかExcelのために仕事をさせられていませんか?
Excelを使い倒して、仕事を楽にするツールにしちゃいましょう
この記事は、VBAを駆使して、ExcelとOutlookを連携した自動化ツールの紹介です
- 1. VBAで効率化したい作業
- 2. どんな効果?
- 3. マクロ
- 4. マクロの使い方
- 5. サンプル
Outlookメールの業務報告をエクセルで自動化したい
定期的な業務報告をメールで送信することは多いかと思います。
業務報告はある程度定型的な形があって、あるパーツのみ更新すれば良いのですが、
メール送信の段階で、前日と同じメールの宛先、日付だけ変わる件名、不用意にいじれない型の部分など、
業務報告とは別の部分で時間を取られてしまうことがあります。
ここで紹介するマクロは、変わらない部分はマクロで処理する、というものです。
なお、OutlookのVBAを使って定型化する方法もありますが、エクセルのほうが、
前日の業務報告と比較しやすい、進捗度合いなどの際、計算式が使えるなどのメリットがあります
- 前日のメールを全返信して下書きメールを作成する(★ここを改善)
- 下書きメールのタイトルを本日に修正する(★ここを改善)
- 下書きメールの全文を削除して、また前日のメール本文をコピペして、本日変わったところを修正(★少し改善)
'---------------------------------------------------------------------------------------------------
'
' マクロ: 業務報告のメールを作成します
'
'---------------------------------------------------------------------------------------------------
Option Explicit
'---------------------------------------------------------------------------------------------------
' 初期設定
' ★mailHeadTemp、mailTo、mailCcを適時修正してください
' ★YYYY/MM/DDはそのままで
'---------------------------------------------------------------------------------------------------
'--- メールタイトル
Public Const mailHeadTemp As String = "[●●部]業務報告書(△△氏名)YYYY/MM/DD"
'--- メール宛先(To)
Public Const mailTo As String = "aaa@ xxx.co.jp; bbb@ xxx.co.jp; ccc@ xxx.co.jp"
'--- メール宛先(Cc)
Public Const mailCc As String = "ddd@xxx.co.jp; eee@xxx.co.jp; fff@xxx.co.jp"
'---------------------------------------------------------------------------------------------------
' 概要: メールを作成します
'
' 前提: 初期設定は修正済み
' 入力: makeMailマクロを実行
' 出力: Outlookのメール下書きが表示されます
'
' 制限: 下書きメールを送信するときに、次の制限があります
' Outlookは起動しておいてください。Outlookのメール下書きのみを送信しても、
' Outlook自体を起動するまでは送信されません
'---------------------------------------------------------------------------------------------------
Sub makeMail()
'★★★コンパイルエラー:ユーザ定義型は定義されていません。
'★★★が表示されたら、参照設定してください
Dim dmyOutlook As Outlook.Application
'★VBEを表示して、[ツール]メニュー−[参照設定]をクリックします。
'★表示された[参照設定 - VBAProject]の[参照可能なライブラリ ファイル]の一覧より、
'★[Microsoft Outlook 1x.0 Object Library]のチェック ボックスをオンにします。
'メールタイトルを設定します
Dim mailTitle As String
Dim todayStr As String
todayStr = Format(Date, "yyyy/mm/dd")
mailTitle = Replace(mailHeadTemp, "YYYY/MM/DD", todayStr)
'メール宛先を設定します
Dim mailToStr As String
Dim mailCcStr As String
mailToStr = mailTo
mailCcStr = mailCc
'A列からメール本文を取得します
Dim mailBody As String
Dim i As Long
mailBody = ""
For i = 1 To Cells(Rows.Count, 1).End(xlUp).row
mailBody = mailBody & Cells(i, 1) & vbCrLf
Next i
'メール下書きを作成します
Dim appOutlook As Outlook.Application
Dim itemApp As Outlook.MailItem
Set appOutlook = New Outlook.Application
Set itemApp = appOutlook.CreateItem(olMailItem)
With itemApp
.Subject = mailTitle
.To = mailToStr
.Cc = mailCcStr
.Body = mailBody
End With
End Sub
マクロは、コード内の初期設定の部分を修正して、エクセルに組み込んでください
マクロはエクセルのA列に記載している文字列を、メールの本文として出力します
メールタイトルと宛先は、マクロの初期設定で指定した文字列が記載されます
※マクロの組み込み方について
@メニューの[開発]から[Visual Basic]を選択します。もし[開発]がない場合は、Alt+F11を押してください
AMicrosoft Visual Basic for Applicationsの画面が出ますので、メニューの[挿入]から[標準モジュール]を選択してください
左側のプロジェクトに標準モジュールと下のほうにModule1が出来たかと思います
Bマクロをコピペで貼り付けてください
Cエクセルをマクロ実行形式で保存します。名前を付けて保存を選択して、
下のほうに出る「ファイルの種類」で[Excelマクロ有効ブック(*.xlsm)]を選択してください
※マクロの実行方法について
@業務報告をA列に記載してください。
Aメニューの[開発]から[マクロ]を選択します。[開発]がない場合は、Alt+F8を押してください
Bマクロ名が出ますので、[makeMail]を選択して、[実行]ボタンを押してください
想定している使い方のサンプルです
@マクロを組み込んだエクセルのA列に業務報告を書きます(最初は全部必要です。2回目以降が楽)
例えば、A列に次のような日報を書きます。例ではありますが、何となく「ここは修正しないでいい箇所かな」と思う点はあるかと思います。
●●課長
お疲れさまです。△△氏名です。
本日の業務内容を、下記のとおり報告いたします。
【本日目標と成果】
〇〇要求定義書の開発(基本設計書〜コーディング) → 完了
【問題点】
特にありません
【作業結果】
09:00 朝礼、本日の作業計画確認
09:30 メールチェック、作業準備、手順確認
10:00 基本設計書作成
11:00 レビュー、指摘の修正、承認依頼
12:00 休憩
13:00 詳細設計書作成
14:00 レビュー、指摘の修正、承認依頼
15:00 コーディング
16:00 レビュー、指摘の修正、承認依頼
17:00 テストケース作成
18:00 退社
以上、よろしくお願いします。
A[makeMail]のマクロを実行します
BOutlookのメール下書きが表示されるので、メールを送信します
以上となります。この記事へのトラックバックURL
https://fanblogs.jp/tb/11269783
※ブログオーナーが承認したトラックバックのみ表示されます。