200906更新
こちらにこの記事で紹介しているコードのより新しいものをご紹介しています。
ご興味あればご確認ください。
Outlookのメール作成ツールはかなり用途が広い
以前にOutlookで差し込み印刷のようにメール本文を作成するExcelVBA(メール作成③)で差し込み印刷のように複数のメールを作成するExcelVBAをご紹介しましたが、職場で同僚に使ってもらっていたところ修正案が出てきましたので更新してご紹介します。
スポンサーリンク
Outlookの差し込みメール作成ツールについて
このメール作成ツールはたくさんの宛先に内容をほんの少しだけ変えたメールを送る必要がある場合に使うツールです。
変更部分を<項目名>とした本文を作成し、表に差し込みたい内容を表に記載することで複数のメールを一括で作成できます。詳しい操作手順に関してはこちらの記事をご確認ください。
Outlookのメール作成VBAの変更点は大きく5点
今回追加した機能としては下記5点になります。
①件名についても差し込みを実行する
前回の紹介したVBAコードでは本文のみを対象として差し込みを行っていましたが、件名についても差し込みできるように修正しました。
②宛先・CCを複数登録可能
前回の記事では宛先・CCは1つだけを想定して作成していましたが、複数の宛先でも記載できるように修正しました。
③添付ファイルの複数登録
前回の記事はセル1つに1つの添付ファイルを記載し、2列で合計2つのファイルを添付できる作りにしていましたが、複数の添付を想定し、1つのセルに記載することで完結できるように修正しました。
④送信しないフラグの設定
リストをそのまま貼り付けて、そのうち一部は送信しなくても良いなどの場合、リストから行を削除するのではなく、送信しなくて済ませられるようにフラグを設定しました。
⑤差し込み項目数を増やす
前回は差し込み内容が2つで作成しましたが、もっとたくさん使用できる方が都合が良いとのことで、項目数を15としました。
サンプルコード使用時の注意点
今回ご紹介するExcelVBAコードは参照設定が必要になる部分があります。
Outlookに関するライブラリーを参照するので「Microsoft Outlook ○○ Object Library」(××はバージョンによって変わります。)を有効にしてください。手順が不明な場合はこちらを確認してください。
(参照設定しなくても動くコードも方法もありますが、やっといて不便はないはずです。)
Outlook差し込みメール作成ツール
①差し込みメール作成用Excelシート
差し込みメール作成に使用するExcelのシートは下記のように準備しています。
本文中の<>で囲まれた部分が6行目E列からS列までの項目名と一致する部分について表の中の情報に置き換える仕様です。
例えば件名に記載している<件名ヘッダー>は今回作成する2つのメールではそれぞれE列の7行目「該当者連絡」、8行目「業務連絡」という文言に置き換えられます。
また、左上にはメール作成の起動ボタンを用意していて、クリックすることでOutlookが起動するように設定しています。
②差し込みメール作成のVBAコード
今回作成したVBAコードは以下のようになります。
Dim oApp As New Outlook.Application
Dim oItem As Outlook.MailItem
’Microsoft Outlook ○○ Object Libraryの参照設定をしない場合/span>
’Dim oApp As Object
’Set oApp = CreateObject(“Outlook.Application”)
’Dim oItem As Object
Dim WSH As Object
Set WSH = CreateObject(“Wscript.Shell”)
Dim DesktopPath As String
DesktopPath = WSH.SpecialFolders(“Desktop”)
Dim 本文 As String, 件名 As String
Dim 宛先列番号 As Long
Dim i, k, x
i = 7
Do Until Cells(i, 2) = “”
If Cells(i, 21) = “” Then
件名 = Cells(2, 2).Text
本文 = Cells(3, 2).Text
k = 5
Do Until Cells(6, k) = “”
件名 = Replace(件名, “<” & Cells(6, k) & “>”, Cells(i, k))
本文 = Replace(本文, “<” & Cells(6, k) & “>”, Cells(i, k))
k = k + 1
Loop
本文 = Replace(本文, vbLf, “<br />”)
Set oItem = oApp.CreateItem(olMailItem)
’送信元を変更する場合、下記の行を有効にしてアカウント名を入力(Microsoft Outlook ○○ Object Library」を有効必須
’oItem.SendUsingAccount = Session.Accounts(“アカウント名”)
oItem.To = Replace(Cells(i, 2), vbLf, “;”)
oItem.Subject = 件名
oItem.HTMLBody = “” & 本文 & ““
oItem.CC = Replace(Cells(i, 3), vbLf, “;”)
oItem.BCC = Replace(Cells(i, 4), vbLf, “;”)
’oItem.Importance = olImportanceHigh
Dim 添付()
x = 0
ReDim Preserve 添付(x)
添付(x) = Cells(i, 20).Text
If 添付(x) <> “” Then
Select Case InStr(添付(x), vbLf)
Case Is = 0
oItem.Attachments.Add DesktopPath & “\” & 添付(x)
Case Else
Do Until InStr(添付(x), vbLf) = 0
x = x + 1
ReDim Preserve 添付(x)
添付(x) = Mid(添付(x - 1), InStr(添付(x - 1), vbLf) + 1)
添付(x - 1) = Left(添付(x - 1), InStr(添付(x - 1), vbLf) - 1)
If 添付(x - 1) <> “” Then
oItem.Attachments.Add DesktopPath & “\” & 添付(x - 1)
End If
Loop
If 添付(x) <> “” Then
oItem.Attachments.Add DesktopPath & “\” & 添付(x)
End If
End Select
End If
oItem.Display ’送信せずに画面を表示する
’oItem.Save ’下書き保存
’oItem.Close 0 ’閉じる
’oItem.Send ’送る場合
End If
i = i + 1
Loop
End Sub
コメント
okumasahito様
VBAを使い始めて1年ほどになるのですが、テキストには載っていない様々な方法を記載いただき、誠にありがとうございます。
この「Outlookの差し込みメールを作成するExcelVBA」もこれまで多々使用させていただいているのですが、もし可能でしたら下記の操作ができないか、ご教示いただきたく思います。
マクロを実行すると、フォントが「MPゴシック」になるのですが、このフォントを変更することは可能でしょうか。
Outlookのフォント設定も変えてみたのですが、実行結果に反映されませんでした。
ReplaceFormat等もVBAに書き込んでみたのですが、エラーとなりました。
恐れ入りますが、対応方法がありましたら、お教えいただければと思います。
どうぞよろしくお願いいたします。
mwtymさま
こんにちは。
ブログの閲覧およびコメントありがとうございます。
HTML形式のメール限定ですが、HTMLのfontタグのface属性を
指定することで変更可能なようです。(下記参照)
修正前:oItem.HTMLBody = “” & 本文 & “” (そもそもこの書き方なら「”” &」は不要ですね)
修正後:oItem.HTMLBody = “<font face=””Meiryo UI””>” & 本文 & “</font>”
あまり推奨の方法ではないかと思いますが、
こちらの環境では変更できました。
okumasahito様
便利なコードをご提示いただきありがとうございます。
是非使用をさせていただきたいのですが、
実現可能であれば2点ほど追加でご教示いただけると幸いです。
①本文の一部に対し「色付け」「太文字」「サイズの変更」をかけることは可能でしょうか。
ご提示いただいているサンプルで例えますと
下記のような状態が可能であると幸いです。
お疲れ様です。
につきまして、
該当者をご連絡いたします。
該当者は【】となっております。←【】内を色付け
【不明点御座いましたらご連絡ください。】←【】内を太文字&サイズを14に
ご確認よろしくおい願いいたします。
□□□□□□□□□□□□□□□□□□
署名
□□□□□□□□□□□□□□□□□□
②送信元の変更は出来ますでしょうか
私の方で使用する予定のツールがアウトルックメールになります。
また変更したい送信元のアドレスのアカウントもアウトルックに追加済みになります。
恐らく
「’oItem.SendUsingAccount = Session.Accounts(“○○@○○”)」
の部分がそれに該当してくるのかとは思いますが、
自分なりにいじってみたところ「実行時エラー もう一度やり直してください」になってしまいます。
以上2点になります。
VBA初心者なため、質問に必要な情報が欠けておりましたら申し訳ありません。
追記させていただきますのでご指摘頂けますと幸いです。
ご連絡ありがとうございます。
フォントサイズ変更・色付けはたぶん簡単にできますが、
色を付けるのが難しいかもしれません。
フォントサイズは「ここにサイズ変更したい文字記入」で変更可能です。
数値は適当に何パターンか試してみて調整いただければ大丈夫だと思います。
太文字は「ここに太くしたい文字入力」で変更できるはずです。
②送信元の変更は参照設定で「Microsoft Outlook ○○ Object Library」を有効にする必要があります。
アカウント名がメールアドレスと違う場合はアカウント名を記載する必要があります。
この部分を削ったつもりで中途半端に削れていなかったので混乱を招いしてしまいました。
申し訳ありません。
またいただいたコメントで気づきましたが書いてはいけないメールアドレスが記載されていたので
編集しております。
早速のご返信ありがとうございます!
申し訳ありません、
お恥ずかしいのですがフォントサイズと太文字についてご回答いただいた内容を読み取り切れず、、、
追加でコードを記入するような形でしょうか?
送信元については、ご教示いただいた内容で解決いたしました!
ありがとうございます!
すみません。
書き方ミスしました。
例えば本文で「お疲れ様です。」を太文字ににしたいとすると、
本文を書くセルの中で「<b>お疲れ様です。</b>」
記載していただければ大丈夫です。
文字サイズ変更の場合は「<font size=4>お疲れ様です。</font>」
でできると思います。
HTMLのタグを使うのですがウェブページではタグが消えてしまうのに
誤ってそのまま使用してしまいました。
ご丁寧にありがとうございます!
ご教示いただいた内容で試してみたところ、無事文字サイズ、太文字共に変更できました!
大変助かりました、
本当にありがとうございます。
非常に役立つコードを公開いただきありがとうございます。
デスクトップの添付ファイルではなく、指定の共有フォルダにあるファイルを添付することも出きるのでしょうか。
コメントありがとうございます。
本文中の3カ所ある添付ファイルを参照するコードの
「DesktopPath」を以下のように共有フォルダのアドレスに変更すると
共有フォルダから添付できると思います。
変更前:oItem.Attachments.Add DesktopPath & “\” & 添付…
変更後:oItem.Attachments.Add “共有フォルダのアドレス” & “\” & 添付…
ただ、ネットワークの速度と共有フォルダのスペックによっては
スピードが遅くなる可能性が高いと思います。