パソコンスキルの教科書

パソコンスキルの教科書

東京大学大学院卒。博士課程に進学を志すも、担当教授と折が合わず、無職になる。医者を目指すも結局断念。田舎で派遣社員として働く。「スキルがなければ、仕事ももらえない」と悟り、ビジネススキルを学ぶ。プログラミング、英語を学び、一部上場企業へ転職。年間100時間以上の業務効率化を行い、社内講師に抜擢。海外の案件を担当し、数億円のプロジェクトに携わる。個人の事業でも、月売上100万を達成。現在は、自分の価値を高めるためのスキル向上支援を行う

エクセルマクロVBAで時間指定のOutlookメールを自動送信・配信

f:id:gene320:20180105082543j:plain

エクセルマクロVBAで時間指定してOutlookメールを送りたい場合、配信タイミングの機能を使います。

配信タイミングをVBAで自動設定すれば、夜中でも早朝でも好きな時間にメールを送信できるようになります。

この記事を読んで出来ること|エクセルVBAを使ってOutlookメールを時間指定で自動配信する

この記事のマクロを起動すると、Outlookメールが自動で作成されます。そのとき、配信タイミングを設定して、送信する時間を指定したメールが作成されます。

考え方としては、Outlookメールの機能である配信タイミングをVBAで操作します。

配信タイミングとは、指定日時以降に配信する機能です。具体的には、以下の方法で手動で設定可能です。

Outlookを開いて
[1] 新しい電子メールをクリック
[2] 新規のメールのオプションをクリック
[3] 配信タイミングをクリック
[4] 指定日時以降に配信

f:id:gene320:20180105093036p:plain

この記事では、上記の[1]~[4]を手動ではなくVBAによって、メール送信のタイミングを指定する方法を紹介します。

事前準備|エクセルとVBE参照設定を設定する

この記事で紹介するプログラムを使うには、以下の2つを事前に準備しておく必要があります。

[1] エクセルに情報をあらかじめ記入しておく
[2] VBEの参照設定を変更しておく

詳しく解説します。

準備1|エクセルに情報をあらかじめ記入しておく

エクセルのセルには、以下の情報を入れておきます。

f:id:gene320:20180105075718p:plain

[1] To宛先のメールアドレス
[2] 件名
[3] 本文
[4] 署名(クレジット)
[5] 添付ファイルURL
[6] 送信日 yyyy/mm/ddで設定
[7] 送信時間 hh:mm:ssで設定(省略した場合は、00:00:00。画像の場合はssを省略しているため、実際は06:00:00となる)

注意点1|To宛先を複数設定したい場合
To宛先を複数設定したい場合は、メールアドレスを「;」で区切ります。以下のような記載です。

abc@gmail.com ; def@gmail.com ; ghi@gmail.com

注意点2|添付ファイルURLはフルパスで
添付ファイルURLは、ファイルのフルパスを入れます。ファイルのフルパスは、以下の画像を参考にしてください。

[1] 添付したいファイルを右クリック
[2] プロパティをクリック
[3] セキュリティのタブをクリック
[4] オブジェクト名 (=フルパス)

f:id:gene320:20171125001804p:plain f:id:gene320:20171125002242p:plain

準備2|VBEで外部ライブラリへの参照設定でOutlook型を追加

Microsoft Outlook 15.0 Object Libraryにチェックを入れることで、Outlook操作の設定ができるようになります。バージョンが古い場合、15.0ではないときがあります。もし15.0ではなく、数字が小さい場合は、それにチェックを入れましょう。

設定方法

1.VBEを開いて頂いて、「ツール」→「参照設定」
2.Microsoft Outlook 15.0 Object Libraryのライブラリにチェックを入れて、OKをクリック

詳細はこちらの画像の通りです。

1.VBEを開いて頂いて、「ツール」→「参照設定」

f:id:gene320:20170613213650p:plain

2.Microsoft Outlook 15.0 Object Libraryのライブラリにチェックを入れて、OKをクリック

f:id:gene320:20170614231515p:plain

アウトルックでメールを指定した時間に自動送信|サンプルコード

ここからは、VBAで時間指定してOutlookメールを送信するサンプルコードを紹介します。

このマクロを起動させると、上記の赤枠で囲われた時間にメール送信されます。以下、全体のプログラムです。必要なら、このままコピペして使ってください。

Option Explicit
Sub sendmail_fixedtime()

'---コード1|outlookを起動する
    Dim toaddress, ccaddress, bccaddress As String  '変数設定:To宛先、cc宛先、bcc宛先
    Dim subject, mailBody, credit As String '変数設定:件名、メール本文、クレジット、添付
    Dim outlookObj As Outlook.Application    'Outlookで使用するオブジェクト生成
    Dim mailItemObj As Outlook.MailItem      'Outlookで使用するオブジェクト生成
            
'---コード2|差出人、本文、署名を取得する---
    toaddress = Range("B2").Value   'To宛先
    ccaddress = Range("B3").Value   'cc宛先
    bccaddress = Range("B4").Value  'bcc宛先
    subject = Range("B5").Value     '件名
    mailBody = Range("B6").Value    'メール本文
    credit = Range("B7").Value      'クレジット

'---コード3|メールを作成して、差出人、本文、署名を入れ込む---
    Set outlookObj = CreateObject("Outlook.Application")
    Set mailItemObj = outlookObj.CreateItem(olMailItem)
    mailItemObj.BodyFormat = 3      'リッチテキストに変更
    mailItemObj.To = toaddress      'to宛先をセット
    mailItemObj.CC = ccaddress      'cc宛先をセット
    mailItemObj.BCC = bccaddress    'bcc宛先をセット
    mailItemObj.subject = subject   '件名をセット
    
'---コード4|メール本文を改行する
    mailItemObj.Body = mailBody & vbCrLf & vbCrLf & credit   'メール本文 改行 改行 クレジット
    
'---コード5|自動で添付ファイルを付ける---
    Dim attached As String
    Dim myattachments As Outlook.Attachments 'Outlookで使用するオブジェクト生成
    Set myattachments = mailItemObj.Attachments
    attached = Range("B8").Value    '添付ファイル
    myattachments.Add attached
    
'---コード6|メール送信する時間を設定する---
    Dim d As Date
    Dim t As Variant
    
    d = Range("B9").Value
    t = Range("B10").Value
    
    mailItemObj.DeferredDeliveryTime = d & " " & t

'---コード7|メールを送信する---
    'mailItemObj.Save   '下書き保存
    mailItemObj.Display  'メール表示(ここでは誤送信を防ぐために表示だけにして、メール送信はしない)
    mailItemObj.Send

'---コード8|outlookを閉じる(オブジェクトの解放)---
    Set outlookObj = Nothing
    Set mailItemObj = Nothing
    
End Sub

基本的には、こちらの記事で紹介している「アウトルックを起動してメールを送信する」という事例をベースにしています

www.fastclassinfo.com

異なる点は、コード6のみです。それ以外は、上記の記事で解説していますので、そちらを読んでみてください。

コード6|メール送信する時間を設定する

'---コード6|メール送信する時間を設定する---
    Dim d As Date
    Dim t As Variant
    
    d = Range("B9").Value
    t = Range("B10").Value
    
    mailItemObj.DeferredDeliveryTime = d & " " & t

1行目:変数設定:dで日付を設定
2行目:変数設定:tで時間をVariant型で設定
4行目:d = エクセルのB9セルの値
5行目:t = エクセルのB10セルの値
7行目:生成したメールを時間設定する

マクロで作成した時間指定メールの注意点|解除方法や配信タイミング

このマクロで作成したメールに関する注意点を記載しておきます。

マクロを実行した後に、指定した時間を変更する

このマクロを動かすと、以下のように送信トレイに保管されます。指定時間になるまで、送信トレイで待機状態になるため、送信トレイのメールをクリックして設定を変更可能です。

f:id:gene320:20180105093117p:plain f:id:gene320:20180105093143p:plain

[1] 送信トレイをクリック
[2] マクロを実行して作成したメール(待機状態)をクリック
[3] オプションをクリック
[4] 配信タイミングをクリック
[5] 指定日時以降に配信を変更

マクロで作成した時間指定メールを送信解除する

送信を中止したい場合は、送信トレイのメールを削除します。手順は以下の通りです。

f:id:gene320:20180105093152p:plain

[1] Outlookの送信トレイをクリック
[2] 日時指定マクロで作成したメールを右クリック
[3] 削除をクリック

時間指定した時刻にOutlookを起動しておかないと、メール配信されない場合がある

PCの使用環境により、Outlookが起動していないと送信されない場合があります。

たとえば、Exchange Server環境ではOutlookを起動していなくても送信されます。会社でOutlookを使っているような場合は、Outlookを閉じていても送信されます。

一方で、家庭で利用している場合は、Outlookを起動しておかないと送信されません。

指定した時間から少し遅れる場合がある

配信タイミングを設定したメールの場合、指定時刻を少し過ぎたタイミングでメール配信されます。これは、送受信の実行タイミングの設定によるものです。以下の画像の通り、送受信は定期的に自動で行われます。

f:id:gene320:20180105081436p:plain

[1] ファイル
[2] 詳細設定
[3] 送受信
[4] 次の時間ごとに自動的に送受信を実行する

送受信の実行タイミングを短く設定すれば、指定時刻に近いタイミングでメール送信されます。

時間指定で送信メールの送信時間はメールを作成した時間になる

マクロを使って、メールを作成した時間がメールの送信日時として表示されます。指定した時間ではありません。

メール送受信に関するプログラムを知りたいなら

こちらの記事でメール送受信の記事を読めますので、ぜひ合わせて読んでみてください。

outlookのメールを自動送信する
GmailのメールをVBAで送信する
outlookの受信メールをエクセルに一覧にして、添付ファイルも保管する
Gmailの受信メールを一覧にして、添付ファイルも保管する

自分にはレベルが高い…と感じたなら、まずは基礎から学ぼう!

この記事を読んだけど、「よくわからない」、「自分で編集できそうにない」と感じるかもしれません。

もし、そう感じる場合は、基礎を完全に理解できていない可能性があります。マクロの基礎を理解していない場合、メール操作はかなりハードルが高いです。

そのため、「ちょっと自信がないな…」と感じるなら、まずはエクセルマクロの基礎から学ぶことをオススメします。

土台ができていない内に学ぶと、使いこなせるようになる前に挫折にしてしまいます。

もしきちんと学ぶなら、こちらの無料動画がオススメです。基礎を確実に学んでから、トライしてみてください。

この記事を読んだ方へのオススメ
エクセルマクロでできることを知りたいなら

www.fastclassinfo.com

エクセルマクロを独学で習得したいなら

www.fastclassinfo.com

エクセルマクロとは?もっと詳しく知りたいなら

www.fastclassinfo.com

エクセルマクロの難易度や習得までの期間を知りたいなら

www.fastclassinfo.com