ヘルプの森~Excel・Access・Office全般ヘルプデスクサイト

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]のチェック ボックスをオンにします。

Microsoft Outlook 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

その後の動作については、アプリケーションによって違ってきます。

twitter hatena line pocket

関連ヘルプ

ブック内のすべてのワークシートで同じ処理を行う 《For Each~Next》
ブックを開くとき、閉じるときにマクロを自動実行したい 《イベント プロシージャ》
データを快速で検索するには 《Find》
アプリケーションを起動し動作させる 《Shell・SendKeys・Wait》
エラーの種類、そしてエラー処理の設置方法について 《On Error GoTo》
InputBox のテキスト ボックス入力時に日本語入力をオンにする 《SendKeys》
Excelのデータをテキスト ファイルに書き出す(出力する) 《Open・Print・Close》
Excelのメールアドレス データを使用し、Outlookのメールを自動送信する 《CreateObject関数》
ソートしたグループごとのデータを別ブックに分割するサンプルVBA
右クリック、印刷、上書き保存などブックに規制をかける 《イベント プロシージャ Cancel=True》
フォルダー内のすべてブックを開いて同じ処理を行う 《Do~Loop・Dir》
フォルダー内のすべての画像ファイルをペイントで開きサイズ変更
フォルダー内のフォルダーとファイルの一覧をセルに書き出す1 《Dir》
フォルダー内のフォルダーとファイルの一覧をセルに書き出す2 《FileSystemObject》
フォルダー内のファイル名を変更する 《Do~Loop・Dir・Name~As》
ColorプロパティとRGB関数について、Color値からRGB、RGBからColor値を求める方法 《Color・RGB関数》