エクセルVBAでOutlookを操作するには、Outlookアプリケーションオブジェクトを設定する必要があります。
オブジェクトを設定しないと、エクセルVBAからOutlookのメールを作成したり取得したりすることができません。
このページではOutlookアプリケーションオブジェクトを設定する方法(参照設定の方法)を紹介します。
また参照設定なしでOutlookを起動する方法も紹介します。
・参照設定なしの方法も紹介する(おすすめしない)
・VBAプログラムでOutlook起動を確認させる方法
以下で説明します。
目次
エクセルVBAでOutlook操作するために2つの方法
エクセルVBAでoutlookのメールを操作するためのプログラミングに入る前に、準備しておくことがあります。
以下の2つのどちらかを採用することで、Outlookを操作できるようになります。
方法2. 参照設定を使わない方法
推奨は方法1です。
以下で詳しく設定方法と推奨理由を説明します。
方法1. 参照設定を使う方法
VBEで外部ライブラリへの参照設定でOutlook型を追加する方法です。
参照設定とは、機能拡張させることです。
Microsoft Outlook XX.X Object Libraryにチェックを入れることで、Outlook操作の設定ができるようになります。
具体的な手順は以下です。
手順1. VBEを開く
手順2. 「ツール」→「参照設定」
手順3. Microsoft Outlook 15.0 Object Libraryのライブラリにチェック
手順4. OKをクリック
以下で手順を見ていきます。
手順1. VBEを開く
エクセルを開いた状態で、[Alt] + [F11]のショートカットキーでVBE(Visual Basic Editor)を開くことができます。
なおエクセルVBAを使用するにあたって、以下の2つの準備をしておくと後で困ることが減ります。
2. 開発タブを追加
保存ファイルの拡張子変更、Excelの基本設定変更の2つです。
2つともで難しい作業はなく、それぞれ1分もあれば設定変更可能です。
上記に関しては、以下のページで解説をしています。
もしVBAを使うための準備段階に不安がある人は上記をご覧ください。
この内容は以下の動画で紹介しています。
入門エクセルマクロの使い方|マクロ作成から実行までを徹底解説
文字や画像だけで分かりづらい人は上記の動画をご覧ください。
手順2. 「ツール」→「参照設定」
「ツール」をクリックして、さらに「参照設定」をクリックします。
手順3. Microsoft Outlook XX.X Object Libraryのライブラリにチェック
上記の画像では、「Microsoft Outlook 16.0 Object Library」にチェックを入れています。
ここは人によっては、15.0など、数値が変わっていることがあります。
ただし「Microsoft Outlook XX.X Object Library」は一つしかチェックできるものがないので、それにチェックを入れるようにします。
メール添付ファイルを取得するとき「Microsoft Scripting Runtime」があると便利
エクセルVBAからOutlookメールを取得するとき、メールの添付ファイルをフォルダに保存したいときがあります。
この「フォルダへの保存」プログラムはいくつかの方法がありますが、FileSystemObjectというオブジェクトを作ると操作がしやすいです。
そしてFileSystemObjectを操作するためには、「Microsoft Scripting Runtime」にチェックを入れておく必要があります。
そのため、「Microsoft Scripting Runtime」にもチェックを入れておきます。
なおメール送信にはFileSystemObjectというオブジェクトは不要であるため、「Microsoft Scripting Runtime」にチェックは必要ありません。
手順4. OKをクリック
これで設定完了です。
方法2. 参照設定を使わない方法
Microsoft Outlook XX.X Object Libraryの参照設定なしの場合は、使えない場合は、以下のようにプログラムを書くとOutlookを操作できます。
1 2 3 4 5 6 7 8 9 |
Sub OpenOutlookApp() Dim outlookObj As Object '参照設定なし Set objOutlook = CreateObject("Outlook.Application") '参照設定あり 'Set outlookObj = New Outlook.Application End Sub |
これでOutlookアプリケーションを起動して、新しいオブジェクトとして設定できます。
参照設定にチェックを入れるべき(方法1を採用すべき)理由
Outlookの参照設定にチェックを入れると、VBEでプログラムを作成しているときに、補完(ヒント)が出現します。
画像のように「objOutlook.」と入力したら、そこから選択できるメソッドなどを表示してくれます。
これにより、コーディングミスを減らすことができます。
たしかに参照設定を使わなくてもコーディングはできますが、参照設定を使うほうが便利です。
エクセルVBAからOutlook起動を確認させてみる|受信トレイを表示
参照設定が完了したら、Outlookを起動して受信トレイを開くプログラムでOutlookを操作できているかどうかを確かめてみます。
ここでは、参照設定「Microsoft Outlook XX.X Object Library」にチェックを入れたパターンで説明します。
以下のプログラムで、エクセルVBAからOutlookを起動できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
'プログラム0|変数設定の指定 Option Explicit 'プログラム1|プログラム開始 Sub OpenOutlookApp() 'プログラム2|Outlookアプリケーションを起動 Dim outlookObj As Outlook.Application Set outlookObj = New Outlook.Application 'Set outlookObj = CreateObject("Outlook.Application") '参照設定なしの場合 'プログラム3|受信トレイを開く Dim inbox As Outlook.Namespace Set inbox = outlookObj.GetNamespace("MAPI") inbox.GetDefaultFolder(olFolderInbox).Display 'プログラム4|Outlookアプリケーションを閉じる outlookObj.Quit 'プログラム5|オブジェクト解放 Set inbox = Nothing Set outlookObj = Nothing 'プログラム6|プログラム終了 End Sub |
以下で詳しく説明します。
プログラム0|変数設定の指定
1 |
Option Explicit |
「Option Explicit」とは、変数宣言を強制するためのものです。
これを入れておくことで、変数の誤記によるエラーを防止することができます。
結果的にプログラム作成速度が上がるので、「Option Explicit」を入力することを習慣化することをオススメします。
プログラム1|プログラム開始
1 |
Sub OpenOutlookApp() |
「Sub OpenOutlookApp()」のプログラムを開始することを意味します。
VBAではプロシージャという単位でプログラムを呼び出します。
プログラム2|Outlookアプリケーションを起動
1 2 3 |
Dim outlookObj As Outlook.Application Set outlookObj = New Outlook.Application 'Set outlookObj = CreateObject("Outlook.Application") '参照設定なしの場合 |
「Dim OutlookObj As outlook.Application」で、outlook起動用の変数をOutlookObjとして変数定義を行います。
「Set OutlookObj = New Outlook.Application」でOutlookを起動します。
プログラム3|受信トレイを開く
1 2 3 |
Dim inbox As Outlook.Namespace Set inbox = outlookObj.GetNamespace("MAPI") inbox.GetDefaultFolder(olFolderInbox).Display |
「Set inbox = outlookObj.GetNamespace(“MAPI”)」でOutlookの受信トレイをオブジェクトに設定します。
「inbox.GetDefaultFolder(olFolderInbox).Display」で受信トレイを表示します。
プログラム4|Outlookアプリケーションを閉じる
1 |
outlookObj.Quit |
Outlookをアプリケーションごと閉じます。(自ずと受信トレイも閉じます)
プログラム5|オブジェクト解放
1 2 |
Set inbox = Nothing Set outlookObj = Nothing |
設定したオブジェクトを解放します。
プログラム6|プログラム終了
1 |
End Sub |
プログラム1と対になるプログラムです。プログラム終了させる記載です。
「End Sub」を読み込むと、プログラムが終了します。
プログラムの説明はここまでです。
エクセルVBAでOutlook作業を効率化する事例
エクセルVBAを使ってOutlook作業を効率化することができます。
このサイトでは以下のような事例をダウンロードファイル付きで解説しています。
事例2|時間指定してOutlookメール送信・配信
事例3|Gmailのメールを送信
事例4|Excel×Outlookでリマインドメール配信
事例5|Excel×Outlook|集計表をメールに貼り付け
事例6|受信メールをエクセルに一覧にする(添付ファイルも保存)
事例7|サブフォルダのメールをエクセルに一覧にする
事例8|受信メールの条件を絞って取得
事例9|VBAでメルマガスタンドを作ってみた
興味があれば、以下のページから詳細を確認できますので、ぜひご覧ください。