【VBA】メール送信やタスク作成を自動化する

# 概要
PCにOutlookがインストールされている場合、VBAでメール送信を自動化することが出来る。
それによって、例えばExcelで送信先やメール内容を管理して、Excelでマクロを実行してすぐさまメール送信、ということが可能。
条件が整っているのであれば、下手にRPAを作るより効率が良い…。

# 必要条件
Outlookがインストールされていて、アカウントの設定が1つ以上あること。

# 準備
Excel VBA(またはWordやAccess)で実装する場合、参照設定を行うとコーディングが楽になる。
VBAのメニュー → ツール → 参照設定を選択。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424975/e476fdb2-18ab-8252-7521-35de6bdda1b3.png)
「Microsoft Outlook xxx Object Library」にチェックを入れて、OKを押す。
※ 「xxx」はインストールされているOfficeのバージョンによって異なる。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424975/2d56b56a-863a-c7a3-11ab-c871bf750766.png)

# メール送信サンプル

[MailItem オブジェクト (Outlook) | Microsoft Docs](https://docs.microsoft.com/ja-jp/office/vba/api/outlook.mailitem)

```
Public Sub メール送信()
    
    Dim objOutlook As Outlook.Application
    Dim objMail As Outlook.MailItem
    
    Set objOutlook = New Outlook.Application
    Set objMail = objOutlook.CreateItem(olMailItem)
    
    With objMail
        .To = "test1@example.com; test2@example.com"
        .Subject = "テスト件名"
        .Body = "テスト本文"
        .Display    ' メール作成画面で表示するのみ
        
        '.Save   ' 下書き保存
        '.Send   ' メール送信
    End With
    
End Sub
```

上記サンプルを実行すると、メール作成画面が表示されるので、送信前に内容を確認することができる。送信するには自分で送信ボタンを押す必要がある。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424975/7bfd0369-d57b-e683-6af5-533379cb9609.png)

また、差出人はOutlookに設定されているアカウントが使用される。

## 名前から宛先を指定する
Outlookのアカウントから利用できるアドレス帳を使い、名前から宛先などを指定することができる。
アドレス帳に、以下のような宛先があるとする。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424975/092cb7b8-216f-a83a-7d5d-89b30fe42f28.png)
この「山田　太郎」という名前から宛先を取得するのが以下のサンプル。

```
Public Sub メール送信2()
    
    Dim objOutlook As Outlook.Application
    Dim objMail As Outlook.MailItem
    Dim objRecipient As Outlook.Recipient
    
    Set objOutlook = New Outlook.Application
    Set objMail = objOutlook.CreateItem(olMailItem)
    
    With objMail
    
        Set objRecipient = .Recipients.Add("山田　太郎")
        objRecipient.Resolve
        objRecipient.Type = olCC
    
        .To = "test1@example.com; test2@example.com"
        .Subject = "テスト件名"
        .Body = "テスト本文"
        .Display    ' メール作成画面で表示するのみ
        
    End With
    
End Sub
```

これを実行すると、以下のメール画面が起動する。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424975/57fef79c-6913-251b-60fd-9c002bbcd7fa.png)

# タスクを他人に依頼する
Outlookの機能の1つ、タスクの作成や、そのタスクを人に依頼することもできる。

[TaskItem オブジェクト (Outlook) | Microsoft Docs](https://docs.microsoft.com/ja-jp/office/vba/api/outlook.taskitem)

```
Public Sub タスク作成()
    
    Dim objOutlook As Outlook.Application
    Dim objTask As Outlook.TaskItem
    Dim objRecipient As Outlook.Recipient
    
    Set objOutlook = New Outlook.Application
    Set objTask = objOutlook.CreateItem(olTaskItem)
    
    With objTask
        .Assign     ' タスクを人に依頼する状態にする
    
        Set objRecipient = .Recipients.Add("山田　太郎")
        objRecipient.Resolve
    
        .Subject = "テスト件名"
        .Body = "テスト本文"
        .DueDate = Now + 30
        .Display
        
    End With
    
End Sub
```

サンプルを実行した結果は以下の通り。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424975/a3f7eae4-c412-3052-fe1a-b1043373fc5d.png)