0
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【WSH】VBA, VBSでメール送信を自動化! VBでoutlookを操作する!!

Last updated at Posted at 2021-07-25

#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』にテンプレートを作成しておきましょう。
vba_macro_tmp.png

●『Sheet2』
メールには表を挿入することができます。
予め以下のように『Sheet2』にExcel表を作成しておきましょう。
メール自動送信マクロ_シート2.png

##3.4:マクロコード
『Module1』モジュールに以下コードを貼り付けます。
※必要に応じてパラメーターを変更してください

create_mail_by_vba
'----- メール自動作成スクリプト -----
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アクセサリ』-『メモ帳』を開きます。
メモ帳に以下コードを貼り付けます。

create_mail_by_vbs
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:まとめ
定例作業で日報をメール送信する場合等、毎回メールを組み立てるのは面倒だと思いますので、本記事で紹介したなマクロ、及びスクリプトを作成しタスクスケジューラでジョブ設定し定期実行させることで、日々の定常作業を楽にしていきましょう。

0
6
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?