今回は宛先ごとに違うファイルを添付してメールを送るマクロをご紹介します。
私は業務でこのマクロをバリバリ使ってて、今では私がサボるためになくてはならないマクロになっています。
具体的には仕事で複数社に見積りを取る時とかに使ってます。
汎用的なコードにしたので、あなたもすぐに使えるようになります。
いろんな宛先にメールを送る時に1件ごとに手作業でポチポチするなんて老害がやることです。
まずは↓の記事を参考にしてマクロを開いてください。
※独学のコードのため、使用は自己責任でお願いします。
目次
このマクロに必要なものとできること
このマクロに必要な物は、宛先やメールアドレス、本文、ファイルの場所、ファイル名がまとまったエクセルファイルとOutlookだけです。
↓の画像がサンプルです。これぐらいだったらすぐに作れますよね。

このマクロを使えば↓のことがボタンひとつで出来るようになります!
- 宛先がまとまったファイルを元にメールを作成
- メールごとにファイルを添付
- メールを送信
- ①に戻る
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
Sub outlook() Dim oApp Dim Wm_ITEM Dim Wm_TO Set oApp = GetObject(, "Outlook.Application") Dim folder As String Dim FileName As String Dim row As Long Dim shname As String row = 2 shname = "sheetの名前" Do Until row = 5 Set Wm_ITEM = oApp.CreateItem(0) Wm_TO = "" WS_OutLk = "" If ThisWorkbook.Sheets(shname).Cells(row, 1) <> "" Then Wm_ITEM.To = ThisWorkbook.Sheets(shname).Cells(row, 5) Wm_ITEM.CC = ThisWorkbook.Sheets(shname).Cells(row, 6) Wm_ITEM.Subject = ThisWorkbook.Sheets(shname).Cells(row, 7) Wm_ITEM.Body = ThisWorkbook.Sheets(shname).Cells(row, 3) & _ ThisWorkbook.Sheets(shname).Cells(row, 4) Wm_ITEM.Body = Wm_ITEM.Body _ & vbCrLf _ & ThisWorkbook.Sheets(shname).Cells(row, 8) folder = ThisWorkbook.Sheets(shname).Cells(row, 9).Value FileName = ThisWorkbook.Sheets(shname).Cells(row, 10).Value Wm_ITEM.Attachments.Add folder & "\" & FileName Wm_ITEM.display Wm_ITEM.Save ' Wm_ITEM.Send 'コメントアウトしたら自動で送信されるので注意 End If row = row + 1 Loop MsgBox "かんりょ" End Sub |
一見、ごちゃごちゃ書いていて難しそうに見えるかもしれませんが、要は宛先や本文、添付ファイルを指定しているだけなので、なにも難しいことはしていないのです。
冷静になるんだ。
それではブロックごとに解説していきます。
エクセル表の説明

- 列目:メール送信の有無 送信の必要があれば*を入力 なければ空欄
- 列目:送信先名 自分が忘れないようなラベル名
- 列目:社名 取引先名を入力、社内だったら空白でもOK メール本文の最初に表示
- 列目:宛先名 メール本文の最初に表示
- 5列目:宛先メールアドレス
- 列目:CCを入力、複数ある場合は「;」セミコロンを挟んで続ける
- 列目:件名
- 列目:本文
- 列目:添付ファイルの場所
- 列目:添付ファイルの名前
outlookを動かす最初の儀式
1 2 3 4 5 6 7 8 9 10 11 |
Sub outlook() Dim oApp Dim Wm_ITEM Dim Wm_TO Set oApp = GetObject(, "Outlook.Application") Dim folder As String Dim FileAd As String Dim row As Long Dim shname As String |
これはだたの儀式ですので、気にする必要はないです。
あなたはパソコンを使う時、いちいちパソコンの原理を理解して使っていますか?
うん、つまりそういうことだ。
エクセル表の一番上の行番号とシート名を指定
1 2 |
row = 2 shname = "メール_いっぱいver" |
私のサンプルファイルだと2行目なのでrow=2と入力しています。
例えば、10行目だったら、row=10と入力してください。
あと、表のシート名を入力しています。今回は「メール_いっぱいver」だったので、shname=”メール_いっぱいver“と入力しています。
かりに「sheet1」のままだったら、shname=”sheet1″と入力してください。
※” ←を忘れないように
マクロでoutlook(アウトルック)を動かす下準備
1 |
Do Until row = 5 |
150行の表だったら、Do until row=150と入力してください。
1 2 3 |
Set Wm_ITEM = oApp.CreateItem(0) Wm_TO = "" WS_OutLk = "" |
これも儀式。無視。
1 |
If ThisWorkbook.Sheets(shname).Cells(row, 1) <> "" Then |
ここは結構重要。
表に入力した宛先全部に毎回メールを送るわけではないですよね。
「この人には今回送って、こいつには今回は送る必要はない」
そんな場合、メールを送信する人には1列目に*を入力(厳密に言えば入力文字はなんでもOK。入力のあり無しで判断してる)
メールを送信しない場合は何も入力しない。
サンプルの表で言うと、1行目と3行目の宛先にはメール送付。2行目、4行目には送付しない。
宛先とか件名、本文をマクロで入力
1 2 3 4 5 6 7 8 |
Wm_ITEM.To = ThisWorkbook.Sheets(shname).Cells(row, 5) Wm_ITEM.CC = ThisWorkbook.Sheets(shname).Cells(row, 6) Wm_ITEM.Subject = ThisWorkbook.Sheets(shname).Cells(row, 7) Wm_ITEM.Body = ThisWorkbook.Sheets(shname).Cells(row, 3) & _ ThisWorkbook.Sheets(shname).Cells(row, 4) Wm_ITEM.Body = Wm_ITEM.Body _ & vbCrLf _ & ThisWorkbook.Sheets(shname).Cells(row, 8) |
- Wm_ITEM.To =宛先
- Wm_ITEM.CC=CC
- Wm_ITEM.Subject=件名
- Wm_ITEM.Body=本文
Wm_ITEM.Bodyを2回入力しているのは1回目で社名+宛先名を入れて、2回目でそれに本文をくっつけているからです。
Cells(row,5)の5が列数を表しています。宛先は表の5列目に入力されているので5と入力しました。
なので、あなたが作成したファイルと私のファイルで並びが違う場合はこの5の部分を修正しましょう。
マクロでoutlookにファイルや画像を添付
いよいよやってきましたファイル添付
1 2 3 4 |
folder = ThisWorkbook.Sheets(shname).Cells(row, 9).Value FileName = ThisWorkbook.Sheets(shname).Cells(row, 10).Value Wm_ITEM.Attachments.Add folder & "\" & FileName |
え?これだけ
そうです。これだけでメールにファイルが添付できるのです。
具体的にはWm_ITEM.Attachments.Addの後ろに添付したいファイルのアドレスとファイル名を入力するのです。
今回はfolderでフォルダーの場所(9列目)を、FileNameでファイル名(10列目)を指定しています。
保存もしくは自動送信!?
1 2 |
Wm_ITEM.Save ' Wm_ITEM.Send |
.Sendでメールを送信します。
今送信の式は’でコメントアウトしているので、自動では送信されません。
はじめの内は間違いがないか確認してから、手作業で送信するようにしてください。
問題なく動いているようであれば送信の式から’を消して自動送信を体験してください。
お疲れさまでした。これで完成です。
私の先輩で今でも忘れられない人がいて、なんで忘れられないかと言うと、複数の宛先に同じ内容のメールを送る際、その人は1通に1宛先でメールを送信してたんですね。別に気密性が高いメールじゃないですよ。つまり、宛先数の分だけ同じメールを宛先だけ変えて送信してたのです。
「なんでそんな手間なことするんですか」
って聞いたら、
「複数一気に送ると相手に失礼じゃん」って。
世の中色んな人がいるなって思いましたね。
その先輩もう辞めちゃったんですが、このファイルを渡したかったです。