腰の重たい、面倒くさがりのみなさん。
メール、自動化しませんか?
あなたの業務に、毎日同じようなメールを作成しなければならない作業はありませんか?
僕には毎日日報をメールで送らなければいけない作業がありました。
それは、その日一日の業務内容をメールにまとめて、Outlookで上司に送信するだけの簡単なお仕事でした。
しかし僕は思いました。
壮絶に面倒くさい!!、と。
もちろん、中には同じ作業の繰り返しを苦にしない方もいるでしょう。
そんな方がこの記事を目にすることがあるのかはわかりませんが、うっかりこんな記事に迷い込んでしまうこともあるでしょう。
勤勉は美徳です。
では、この記事を閉じて日々のルーティン業務にお戻りくださいませ。
ここから先は、面倒くさがりの面倒くさがりによる面倒くさがりのための、メール自動化の方法についての解説記事です。
我こそは、という方は先にお進みくださいませ・・・。
サンプルファイルダウンロードはこちらから!
もくじああ、面倒なメール作成
さて、ここまで来られた皆さんはきっと、ちょっとした作業すら面倒でしかたのない方々なのでしょう。
非常によくわかります。
確かに勤勉は美徳です。
しかし、現代でもっとも評価されるのは、まじめで勤勉な人間ではなく、同じ作業をより短時間でできる人間です。
メールの自動化の仕組みは、エンジニアでない方でも案外簡単に作成することができます。
前置きはこのくらいにして、さっそくその方法をお教えします。
メール自動化計画
メールの自動化を行う方法はいくつかあります。
以下はその特徴とメリットをまとめたものになります。
メールの自動化方法 | メリット | デメリット | 学習難易度 |
VBAでOutlook自動化 | Officeがあれば使える | Outlookでしか使えない | 中 |
PythonやC#などによるプログラミング | Gmailなども自動化できる | 業務PCで使えない場合がある | 高 |
IFTTTなどの自動化ツール | 複数サービスの連携が簡単 | 業務PCで使えない場合がある | 低 |
上で例に挙げた3つのうち、自分でプログラミングをすることやIFTTT連携を行うことは、一般的な日本企業では難しいケースも多いでしょう。
日本企業の多くはセキュリティ上、規定外のツールやアプリケーションの使用が制限されていたり、そもそもネットにつながってないなんて場合もあるからです。
ですが、日本の会社の大半は、MicrosoftのOfficeを導入しています。
業務でExcel、Outlookを使っていないという会社はむしろ少ないのではないでしょうか?
VBA自動化であれば、Officeさえあれば他のツールも、インターネット接続もいりません。
確実にあなたの業務を自動化できます。
では、さっそく、VBAでメールを自動化する方法を見ていきましょう。
Outlookメール自動化の準備
まず、VBAでOutlookを操作するには、Outlookオブジェクトを有効にする必要があります。
Excelの開発タブからVisualBasicを開き、[ツール]→[参照設定]の順に開きます。
そこで、下の画像のようにMicrosoft Outlook 16.0 Object Libraryを有効にしたら準備は完了です!

OutlookメールをVBAで作成する
では、順番にコードを見ていきます。
コードの全文は一番最後に貼りますね。
まずは標準モジュールを開き、Sub関数で、マクロを作成しています。
Sub 日報メール作成() 'メールの各要素の生成 formtext = UserForm1.TextBox1.Value
この、UserForm1.TextBox1.Valueというのは、VBAユーザーフォームで作成したメールの入力フォームのことです。
ユーザーフォームオブジェクトには好きな名前をつけられます。
.valueで、入力された文字列を取得して、formtextという変数に格納しています。
次はこちらの部分ですね。
まず、Withのセンテンスでメールの送信先などの情報を記載したSheet2というシートを開きます。
With Sheet2 Dim myTo As String: myTo = .Range("B3").Value Dim mySubject As String: mySubject = .Range("B4").Value Dim myBody As String: myBody = "" myBody = .Range("B5").Value & vbCr & .Range("C5").Value & vbCr & .Range("D5").Value & vbCr & vbCr myBody = myBody & formtext & vbCr & vbCr myBody = myBody & .Range("B6").Value & vbCr & .Range("C6").Value End With
そして、シート内の書くセルから、必要な情報を抜き出して変数に格納していきます。
詳しくは、こちらのマクロファイルをダウンロードできますので、直接ご確認いただければと思います。
ちなみに、ちょいちょい出てくるvbCrという文字列は、改行を意味します。
これを&で文字列に連結することで、VBA上で改行を表現できます。
最終的に、メールの全文はmyBodyという変数に格納されました。
最後に、Outlookのメール形式に変換して、メールの下書きまで作成しましょう。
完全に自動で送信まですることも可能ですが、僕は誤送信が怖かったので下書きまでにしておきました。
'下書き作成 Dim olApp As Outlook.Application Set olApp = New Outlook.Application Dim myMail As MailItem Set myMail = olApp.CreateItem(olMailItem) With myMail .To = myTo .Subject = mySubject .Display .Body = myBody & .Body myMail.Body = strstyle & myMail.Body End With
Excelマクロをアプリケーション風に使う
さて、上記のコードだけでもメール自動化ツールとしては使えますが、どうせならアプリケーションっぽくしたいですよね。
Excelファイルを開くと同時にユーザーフォームを立ち上げ、Excelシートを非表示にすることによって、アプリケーションっぽい使用感になります。
以下のコードで実装できます。
Auto_Open関数は、ファイルの起動時に読み込まれます。
ちなみに、Application.DisplayAlerts = Falseの一文で、閉じる際の「保存しますか?」というアラートも非表示にしてます。
邪魔ですもんね、あれ笑
Sub Auto_Open() UserForm1.Show Application.DisplayAlerts = False End Sub
まとめ
今回はOutlookをVBAで自動化してみました。
作成して思ったこととしては、やっぱPythonで書いたほうが楽だなー、ってことでした。
VBAってすごく便利で、僕もよく使ってます。
何がいいって、PCをほとんど使えない人でも多少は使い方がわかるのがExcelなんですよね。
ほんとに、Microsoftの誰でも使えるUIを作る力はすごいなと思います。
Excelがこれだけ普及してる世の中なので、VBAでツールを作ると、PCをまともに使えない人にも配布することができます。
また、アプリケーションのインストールやネット通信が禁止されている企業でも使えるケースが多いです。
なので、VBAがもっと開発しやすい言語だったらな、と素人ながらしばしば感じてきました。
そんな折、MicrosoftはOffice2019から、VBAの代わりにPythonを導入する方針という噂を耳にしました。
もしも本当に実現するなら非常に楽しみですね。
Officeのエコシステムがさらに発展しそうです。
コード全文
サンプルファイルダウンロードはこちらから!
Sub 日報メール作成() 'メールの各要素の生成 formtext = UserForm1.TextBox1.Value With Sheet2 Dim myTo As String: myTo = .Range("B3").Value Dim mySubject As String: mySubject = .Range("B4").Value Dim myBody As String: myBody = "" myBody = .Range("B5").Value & vbCr & .Range("C5").Value & vbCr & .Range("D5").Value & vbCr & vbCr myBody = myBody & formtext & vbCr & vbCr myBody = myBody & .Range("B6").Value & vbCr & .Range("C6").Value End With '下書き作成 Dim olApp As Outlook.Application Set olApp = New Outlook.Application Dim myMail As MailItem Set myMail = olApp.CreateItem(olMailItem) With myMail .To = myTo .Subject = mySubject .Display .Body = myBody & .Body myMail.Body = strstyle & myMail.Body End With End Sub