皆さんはFAXで見積もり依頼などを複数宛先に一斉送信していませんか?
実は私もつい最近までFAXを使っていました。
メールで複数の業者に相見積もりする場合、宛先に競合する会社のメールアドレスを複数設定することは難しいです。BCCで送れば良いかもしれませんが、それも失礼に当たるかと思っていました。
複数の宛先宛に個別にメールを作成するのも手動だと結構手間がかかります。
今回は同じ内容で複数宛先のOutLookメールメッセージを自動的に生成するExcelVBAを紹介します。
見積もり用の仕様で作成していますが、内容を変更すれば見積もり以外にも使えますのでご活用ください。
プログラムの仕様
- 選択された宛先リスト内のメールアドレスと会社名と担当者名を差し込んでメールを作成する
- 件名、文頭、本文、文末に分けて入力セルを用意して変更する必要がある部分と定型部分は分ける
- 今日から何日後までに回答してもらいたいかを自動計算する(土曜と日曜になる場合には翌月曜にする)
- 件名に通し番号を付加する(今日の日付-通し番号の形式)
- 共通で貼り付ける添付ファイルがあるかをメッセージボックスで確認し、ある場合にはファイルダイアログで選択する。(複数選択可能)
- ファイルダイアログで開くフォルダを指定できるようにする
- LOGのシートに作成したメールの「通し番号」と「送付先」と「内容(見積もり内容)」の履歴を記録する
エクセルファイルの用意
エクセルにメールを作成するための情報を入力するシートを用意します。
シート名を「メイン」に変更しておいてください。
件名情報はB2セル、文頭の定型部分をB3セル、本文(内容変更する部分)をB4セルに入力できるようにします。
通し番号の情報をE1~H1までに記録するセルを用意します。
回答納期用としてB4セルに何日後に設定するかを入力するセルを用意します。
D4セルには下の数式を入力すると回答納期の日付が計算されるようになります。(土曜と日曜になる場合には翌月曜日となります)
=IF(WEEKDAY(TODAY()+$B$4,2)=6,TODAY()+$B$4+2,IF(WEEKDAY(TODAY()+$B$4,2)=7,TODAY()+$B$4+1,TODAY()+$B$4))
E4セルには下の数式を入力しておきます。回答納期の情報をメール本文に貼り付ける文字列として用意しています。
="回答希望:"&TEXT(D4,"yyyy/mm/dd")
B5セルに文末の定型の情報を入力するセルを用意します。署名などを記述します。
B6セルには添付ファイルを選択するファイルダイアログで開きたいフォルダパスを入力するセルを用意します。
A9~D9セル以降は宛先のメールアドレスや会社名、担当者名を入力する宛先一覧表を用意します。
つづいて、新しいシートを追加してシート名を「LOG」に変更してください。
A1セルに「通し番号」、B1セルに「送付先」、C1セルに「内容」を入力してください。
自動でメールを作成したらLOGシートに履歴が自動的に記録されるようにします。
ここまで出来たらファイルを名前を付けて保存してください。拡張子はマクロを含むことができる「.XLSM」にしてください。
VBAプログラムコードの用意
開発タブの中の挿入からコントロールフォームのボタンを選択後、A7~A8セルをドラッグアンドドロップでボタンを配置します。
ドラッグアンドドロップ後、マクロの新規登録ウィンドウが表示されますので、マクロの保存先を先ほど保存したファイル名を選択してください。マクロ名はボタン1_Clickのままで新規作成ボタンを押してください。
新規ボタンを押したら自動的にVBEが起動しますので、ボタン1_Click()の部分を削除し、下記コードをコピーして貼り付けてください。
Sub ボタン1_Click()
Dim MAINROW As Long
Dim TOUSHI_STR As String
Dim LOGROW As Long
Dim OL As Outlook.Application
Dim MI As Outlook.MailItem
Dim RET As Long
Dim SENDFILEPATH As Variant
Set OL = CreateObject("Outlook.Application")
LOGROW = 1
Do Until Worksheets("LOG").Cells(LOGROW, 1).Value = ""
LOGROW = LOGROW + 1
Loop
OPENFOLDER = Worksheets("メイン").Range("B6").Value
If OPENFOLDER <> "" Then
If Dir(OPENFOLDER, vbDirectory) <> "" Then
If InStr(OPENFOLDER, "\\") > 0 Then
'ネットワーク上
With CreateObject("WScript.Shell")
.CurrentDirectory = OPENFOLDER
End With
Else
'ローカル
ChDir (OPENFOLDER)
End If
End If
End If
'添付ファイル
RET = MsgBox("ファイルを添付しますか?", vbYesNo)
If RET = 6 Then
SENDFILEPATH = Application.GetOpenFilename(, , "添付するファイルを選択してください", MultiSelect:=True)
If Not IsArray(SENDFILEPATH) Then
RET = 7
End If
End If
With Worksheets("メイン")
'通し番号
If .Range("F1").Value = Date Then
.Range("H1").Value = .Range("H1").Value + 1
TOUSHI_STR = CStr(Date) & "-" & CStr(.Range("H1").Value)
Else
.Range("F1").Value = Date
.Range("H1").Value = 1
TOUSHI_STR = CStr(Date) & "-1"
End If
MAINROW = 10
Do Until .Cells(MAINROW, 2).Value = ""
If .Cells(MAINROW, 1).Value <> "" Then
Set MI = OL.CreateItem(olMailItem)
MI.To = .Cells(MAINROW, 2).Value
MI.Subject = .Range("B1").Value & " " & TOUSHI_STR
MI.Body = .Cells(MAINROW, 3).Value & " " & .Cells(MAINROW, 4).Value & vbLf & vbLf & .Range("B2").Value & vbLf & vbLf & .Range("B3").Value & vbLf & vbLf & .Range("E4").Value & CStr(.Range("F4").Value) & vbLf & vbLf & .Range("B5").Value
'添付ファイル貼り付け
If RET = 6 Then
If SENDFILEPATH(1) <> "" Then
For Each ADDFILE In SENDFILEPATH
MI.Attachments.Add ADDFILE
Next
End If
End If
MI.Display
'宛先選択をクリア
.Cells(MAINROW, 1).Value = ""
'LOGシートに転記
Worksheets("LOG").Cells(LOGROW, 1).Value = TOUSHI_STR
Worksheets("LOG").Cells(LOGROW, 2).Value = .Cells(MAINROW, 3).Value & " " & .Cells(MAINROW, 4).Value
LOGSTR = Replace(.Range("B3").Value, vbLf, " ")
Worksheets("LOG").Cells(LOGROW, 3).Value = LOGSTR
LOGROW = LOGROW + 1
End If
MAINROW = MAINROW + 1
Loop
End With
Set OL = Nothing
Set MI = Nothing
End Sub
ボタンの文字を変更するには、ボタンを右クリックして「テキストの編集」を選択するとボタンの文字を変更できますので「メール作成」に変更してください。
最後にエクセルVBAからOUTLOOKの機能を呼び出す参照設定をおこないます。
VBEのツールタブを選択し、参照設定を押すと設定ウィンドウが表示されるので、「Microsoft Outlook 16.0 Object Library」にチェックを入れてからOKを押します。(エクセルのバージョンによってはMicrosoft Outlook Object Libraryのバージョンが16以外の可能性があります)
使用方法
B1~B5セルに共通メール内容を入力します。
10行目以降の宛先一覧のA列に文字が入っていればその宛先でメールが作成されます。
入力が完了したら「メール作成」ボタンを押します。
添付ファイルの有無をメッセージボックスで確認されるので「はい」か「いいえ」を押します。
「はい」を選択した場合、ファイルダイアログが開くので、ファイルを選択して「開く」ボタンを押します。(添付ファイルが特定のフォルダに保存されている場合、B6セルのデフォルトで開くフォルダを設定しておくことをお勧めします)
「いいえ」を選択すると添付ファイルを選択するウィンドウは表示されずそのままメールが作成されます。
自動的に選択した宛先のメールが作成されます
内容を確認して、個別に文面を修正する場合や、添付ファイルを貼り付けてから、送信ボタンを押してください。
過去のメール作成した履歴を確認したい場合にはLOGシートを参照ください。
最後に
複数の宛先に同一内容のメールを作成する手間がかかるからFAXの一斉送信機能を利用している方は、このプログラムを利用することでFAXからメールに切り替えることができるようになります。
通信費用の削減もできますし、ファイル添付もできるので、FAXだと文字がつぶれて読み間違えるといったことも無くなります。
今回は見積もり用の仕様でファイルを作成してみましたが、改造すればその他の用途にも流用できます。
このほかにもExcelVBAの有益なコードを公開していますのでそちらの記事も読んでくださいね。
コメント