No.008
ExcelからOutlookでメールを作成・送信する基本のVBA 《CreateObject関数》
2003/2007/2010/2013
ExcelからOutlookのメールを作成、送信するためのVBAについて、今回は、VBAの基本構造をみていくことにします。
下記のサンプルは、メール1通だけを作成もしくは送信するための記述となります。
ExcelVBAより、別のアプリケーションを操作するには、CreateObject関数を使用します。詳しくは後述のヘルプmemoをご参照ください。
あとで注意点などをご案内しますが、とにかくまずは記述のサンプルです。
Sub Sample()
'Outlookオブジェクト生成
Dim OL As Outlook.Application
Dim MI As Outlook.MailItem
Set OL = CreateObject("Outlook.Application")
Set MI = OL.CreateItem(olMailItem)
'メール各設定
MI.SentOnBehalfOfName = "あああ <aaa@aaa.com>" '差出人
MI.To = "xxx1@xxx.com" 'TO
MI.Cc = "xxx2@xxx.com;xxx3@xxx.com" 'CC
MI.Bcc = "" 'BCC
MI.Attachments.Add "D:¥sample.txt" '添付
MI.Subject = "こんにちは" '件名
'本文
MI.Body = "いつもお世話になっております。" _
& vbCr & "今後もよろしくお願いいたします。"
'メール表示
MI.display
'オブジェクト解放
Set OL = Nothing
Set MI = Nothing
End Sub
これで、次のようなメールが1通作成、表示されます。

このとき、Outlook本体は起動してきません。
[送信]ボタンをクリックすればメールは送信されますが、メールを表示せずに即送信するのであれば、MI.display のところを、次のように記述します。
'メール送信
MI.send
この場合、画面に一切表示されることなく送信されていきますので、宛先や内容は自己責任でお願いします。
ではこのあとは、ポイントをご案内していきます。
<メール各設定>
メール各設定は、宛先などを指定していますが、すべて文字列での設定となっています。
セルにメールアドレス等が記入されているのであれば、各設定の右辺にはセル参照を代入すればよいです。
MI.To = Range("A2") 'TO
差出人を設定しない場合は、送信するOutlookの既定の差出人(メールアカウント)となります。
Outlook に設定していないメールアカウントを差出人にすることもできます。ただし、送信し受信されたメールの差出人欄には「代理送信」の表示が入ります。
(これは本題ではないので、気になる方はお試ししてください)
<本文>
メール本文のところで使用している、「vbCr」は改行コードです。
アンパサンド(&)で文字列とつなぎます。
差し込みで本文を仕上げたい場合は、アンパサンドや改行コードでつなぎながら、文字列の1つのかたまりを作っていきます。
<オブジェクト解放>
CreateObject関数で作成したオブジェクトへの参照は、最後に解放してあげる必要があります。
オブジェクトの参照を解放するには、オブジェクト型変数に Nothing を代入します。
今回の記述を簡単に言うと、ExcelからOutlookのメール オブジェクトを作成し、宛先をはじめとするプロパティ設定をし、メールを表示(送信)するメソッドを実行する、ということになります。
<エラー>
もし、実行しようとして「ユーザー定義型は定義されていません。」というエラーが表示された場合の対処方法です。

VBEを表示して、[ツール]メニュー-[参照設定]をクリックします。
表示された[参照設定 - VBAProject]の[参照可能なライブラリ ファイル]の一覧より、[Microsoft Outlook 1x.0 Object Library]のチェック ボックスをオンにします。

OutlookのあとはOfficeのバージョン、Office2013は「15.0」、上図はOffice2010です。
今回は、Excelから1通のメールを作成、送信するときのVBA基本構文をご案内してきました。大量メールを送信する場合などのサンプルはまた次回にご紹介していきます。
ヘルプmemo
<CreateObject関数>
ActiveX オブジェクトへの参照を作成して返します。
構文: CreateObject( class,[servername] )
引数:
class …作成するオブジェクトのアプリケーション名とクラスを指定
servername …オブジェクトが作成されるネットワーク サーバーの名前を指定[省略可]
ヒント:
引数classには、appname.objecttype の構文で指定します。(後述)
引数servernameを省略すると、ローカル コンピューターが使用されます。
引数classには、次のように参照するアプリケーションを指定します。
CreateObject("Excel.Application")
- Excel …Excel.Application
- Word …Word.Application
- PowerPoint …PowerPoint.Application
- Access …Access.Application
- Outlook …Outlook.Application
- InternetExplorer …InternetExplorer.Application
その後の動作については、アプリケーションによって違ってきます。