#1:はじめに
VBA、VBSにてメールを自動作成・送信することができます。
VBA, VBSなんてよく分からない、プログラミングなんて難しく感じる等あるとは思いますが、メール作成スクリプトのコードには誰でも使用することができる分かりやすいテンプレートがありますので、それをちょっとイジるだけで誰でも簡単にVBA、VBSを作成することができます。
#2.:概要
##2.1:概要 - VBAを使用してのメールの自動作成・送信
Excel VBAを使用してのメールの自動作成・送信を実現します。
予め『To』『本文』等をExcelシートに記入しておき、それを基にメールを作成してくれるVBAを作ります。
##2.2:概要 - VBSを使用してのメールの自動作成・送信
VBSを使用してのメールの自動作成・送信を実現します。
タスクスケジューラ等に登録しておくことで定期的にメールの自動作成・送信をしてくれます。
#3:VBAを使用してのメールの自動作成・送信
##3.1:事前準備
まずはExcelを起動し、マクロが使えるように[ファイル]-[名前を付けて保存]から拡張子をxlsmに変更します。
その後、『Alt』+『F11』をクリックし、VBエディタを開きます。
VBエディタ左ペイン、[<ワークブック名>]-[標準モジュール]を右クリックし、[挿入]-[標準モジュール]クリック。
『Module1』モジュールが作成されたことを確認します。
##3.2:参照設定
VBエディタにて、[メニュー] - [参照設定]をクリックし、参照設定の画面が表示されたことを確認します。
【Microsoft Outlook XX.X Object Library】にチェックを付けます。
画面右上の[OK]をクリックし、設定を反映させます。
##3.3:テンプレートシートの作成
Excelシートを以下のように編集します。
●『Sheet1』
『To』や『cc』等のメール作成に必要な情報を予めExcelシートに作成しておきましょう。
以下のように『Sheet1』にテンプレートを作成しておきましょう。
●『Sheet2』
メールには表を挿入することができます。
予め以下のように『Sheet2』にExcel表を作成しておきましょう。
##3.4:マクロコード
『Module1』モジュールに以下コードを貼り付けます。
※必要に応じてパラメーターを変更してください
'----- メール自動作成スクリプト -----
Sub send_mail_macro()
'--- 宣言 ---
Dim Appobj As Object
Dim objMAIL As Object
Dim ws_sheet_tmp As Worksheet
Dim ws_sheet_table As Worksheet
Dim date_today As Date
Dim body_mail
Dim cregit_mail
'--- 日付宣言 ---
date_today = Format(Date, "yyyy/m/d")
date_today_fm_yyyymmdd = Format(Date, "yyyy年m月d日")
'--- オブジェクト生成 ---
Set Appobj = CreateObject("Outlook.Application")
Set objMAIL = Appobj.CreateItem(0)
'--- シート挿入 ---
Set ws_sheet_tmp = ThisWorkbook.Worksheets("Sheet1")
Set ws_sheet_table = ThisWorkbook.Worksheets("Sheet2")
'--- メール作成 ---
With objMAIL
'--- 書式形式 ---
'// 「1」 =『テキスト』. 「2」 =『HTML』, 「3」 =『リッチテキスト』
.bodyformat = 2
'--- 送信元 ---
.SentOnBehalfOfName = ws_sheet_tmp.Range("D2").Value
'--- 宛先 ---
.To = ws_sheet_tmp.Range("D3").Value
'--- CC ---
.CC = ws_sheet_tmp.Range("D4").Value
'--- BCC ---
.BCC = ws_sheet_tmp.Range("D5").Value
'--- 件名 ---
.Subject = ws_sheet_tmp.Range("D7").Value
.Subject = Replace(.Subject, "$o_today", date_today)
'--- outlookを表示する ---
.Display
'--- 本文 ---
With objMAIL.GetInspector.WordEditor.Windows(1).Selection
'--- メール本文作成 ---
body_mail = ws_sheet_tmp.Range("D8").Value
table_name = ws_sheet_table.Range("A1").Value
cregit_mail = ws_sheet_tmp.Range("D9").Value
'--- 本文内変数の置換
ws_sheet_tmp.Range("D8").Value = Replace(ws_sheet_tmp.Range("D8").Value, "$fo_today", date_today_fm_yyyymmdd)
'--- 本文の書式設定
.Font.Name = "遊ゴシック"
.Font.Size = "11"
'--- 本文作成 ---
.TypeText ws_sheet_tmp.Range("D8").Value & Chr(13) & Chr(13)
'--- セルデータ作成 ---
.TypeText table_name & Chr(13)
ws_sheet_table.Range("A3:F17").CopyPicture
.Paste
.TypeText vbCrLf & vbCrLf & vbCrLf
'--- 署名作成 ---
.TypeText ws_sheet_tmp.Range("D9").Value
'--- 添付ファイル用の改行 ---
.TypeText vbCrLf & vbCrLf
End With
'--- ファイル添付 ---
.Attachments.Add ws_sheet_tmp.Range("D10").Value
.Attachments.Add ws_sheet_tmp.Range("D11").Value
'--- メール送信 ---
'.Send
End With
'--- オブジェクト解放 ---
Set objMAIL = Nothing
Set Appobj = Nothing
End Sub
##3.5:動作確認
VBエディタで対象のモジュールが開かれていることを確認したら、『F5』を押打してマクロを実行します。
受信先に設定したメールアドレス宛にメールが送れていることを確認してください。
#4:VBSを使用してのメールの自動作成・送信
##4.1:スクリプト作成
Windows左下の『スタート画面』-『Windowsアクセサリ』-『メモ帳』を開きます。
メモ帳に以下コードを貼り付けます。
Option Explicit
'-----------------------------------------
'-- 宣言
'-----------------------------------------
Dim mailAddress
Dim mailTo
Dim mailCc
Dim MailApp
Dim mailobj
Dim mailBody
Dim mailSubject
Dim mailAttachment
Dim timeZone
Dim byLine
Dim kaigyo
'-----------------------------------------
'-- 個人情報
'-----------------------------------------
'// 自分のメールアドレス
mailAddress = "****.*****@****.***"
'// 送信先:TO
mailTo = "****.*****@****.***"
'// 送信先:CC
mailCc = "****.*****@****.***"
'-----------------------------------------
'-- オブジェクト生成
'-----------------------------------------
Set MailApp = CreateObject("Outlook.Application")
Set mailobj = MailApp.CreateItem(0)
'// 改行コード
kaigyo = vbCrLf
'-----------------------------------------
'-- 件名
'-----------------------------------------
mailSubject = "テストメール_"
mailSubject = mailSubject & Year(Date) & "/" & Right("0" & Month(Date), 2) & "/" & Right("0" & Day(Date), 2)
'-----------------------------------------
'-- 本文
'-----------------------------------------
mailBody = "送信テスト" & kaigyo
mailBody = mailBody & "本メールはQiita記事【【WSH】VBA, VBSでメール送信を自動化! VBでoutlookを操作する!!】でのテストメールです。" & kaigyo & kaigyo
mailBody = mailBody & "メールが受信できているか確認してください。" & kaigyo
mailBody = mailBody & "確認できない場合は、再度スクリプトを実行してください" & kaigyo & kaigyo
'-----------------------------------------
'-- 署名
'-----------------------------------------
'// 署名設定
byLine = "----------------------------------------------" & kaigyo
byLine = byLine & "名前:*** ****" & kaigyo
byLine = byLine & "会社:*************" & kaigyo
byLine = byLine & "TEL:***-****-****" & kaigyo
byLine = byLine & "Mail:***.****@**.***" & kaigyo
byLine = byLine & "----------------------------------------------" & kaigyo
'// 署名を本文に追加
mailBody = mailBody & byLine
'-----------------------------------------
'-- 添付ファイル
'-----------------------------------------
'mailAttachment = "ファイルフルパス"
'-----------------------------------------
'-- メール作成
'-----------------------------------------
mailobj.To = mailTo
mailobj.Cc = mailCc
mailobj.Subject = mailSubject
mailobj.Body = mailBody
'mailobj.Attachments.Add mailAttachment
mailobj.Display
'mailobj.Send
'-----------------------------------------
'-- オブジェクト開放
'-----------------------------------------
Set mailobj = Nothing
Set MailApp = Nothing
WScript.Quit 0
スクリプトを貼り付けたら、『ctrl』+『s』でファイルを以下拡張子にリネームし、文字コードを『SJIS』に変更をし、任意のパスに保存してください。
※スクリプト名は任意の名前を指定して下さい
<拡張子>
'===========================
・変更前 ⇒ ***.txt
・変更後 ⇒ ***.vbs
'===========================
<文字コード>
'===========================
・変更後 ⇒ SJIS(ANSI)
'===========================
##4.2:動作確認
ファイルをダブルクリックし、スクリプトを実行してください。
Outlookアプリケーションが立ち上がり、スクリプト記載の内容とおりの新規メールが作成されたことを確認してください。
#5:まとめ
定例作業で日報をメール送信する場合等、毎回メールを組み立てるのは面倒だと思いますので、本記事で紹介したなマクロ、及びスクリプトを作成しタスクスケジューラでジョブ設定し定期実行させることで、日々の定常作業を楽にしていきましょう。