私は10年以上人事業務を担当しています。
人事業務では単純な繰り返し作業が多く、
業務効率化のために、自分が開発したExcelマクロ(VBA)を公開したところ
「うちの部署の業務でも使いたい!」
「是非Excelマクロを教えてほしい!」
と、多くの需要があることを知り、
より多くの人の役に立てるのではないかとこのサイトを立ち上げました。
現在では、社内で様々な業務効率化ツールの開発を手掛けています。
今回は、その中から、
メールに添付ファイルを付けて一斉送信する方法
を解説してきます。
人事業務効率化!添付メールを一斉送信する方法
例えば、人事業務にこんな作業がありませんか?
・各部署宛に、その部署用の添付ファイルを付けて一斉送信したい
・各課長宛てに、その課長の部下の勤務実績を添付ファイルにして送信したい
・ほぼ同じメール内容で添付ファイルだけ変えて送りたい
実は、ExcelマクロではOutlookメールを操ることが出来ます。
もし、あなたの会社のメールソフトがOutlookだとしたら
メール送付業務を効率化できる可能性があります。
人事業務を効率化するための事前準備
まず、ExcelVBAでOutlookメールを操るためには
開発タブ>ツール>Microsoft Outlook 16.0 Object Libraryにチェック
を入れておく必要があります。
続いて、エクセル上で
こんなシートを作ります。
最後に、下記のマクロコードを挿入します。
マクロコードの入れ方が分からない人は
こちらの記事を先に読んでくださいね。
Sub メール添付一斉送信()
Dim myOLApp As Object
Dim myDATA As MailItem
Dim GYOU As Long
Dim Ans As Variant
Ans = MsgBox("マクロを実行しますか?", vbYesNo)
If Ans = vbNo Then Exit Sub
'メールを新規作成
Set myOLApp = CreateObject("Outlook.Application")
For i = 13 To Range("B65536").End(xlUp).Row
Set myDATA = myOLApp.CreateItem(olMailItem)
'添付ファイルの追加
myDATA.Attachments.Add Range("D8").Value & "\" & Range("F" & i).Value & ".xlsx"
'宛先アドレスの件名本文追加
myDATA.TO = Range("B" & i).Value
myDATA.Subject = Range("C" & i).Value
myDATA.Body = Range("D" & i).Value
'メール送信
myDATA.Send
Next
Set myDATA = Nothing
Set myOLApp = Nothing
End Sub
これで事前準備はOKです。
あとは、
エクセル上のシートに、
メールアドレス、件名、本文、添付したいファイル名、フォルダ名
を入力してください。
送りたいファイル自体は
指定したフォルダ内に入れておいてくださいね。
これで、マクロを実行すれば
指定したアドレスに指定した添付ファイルを付けて一斉に送信することが出来ます。
添付メール一斉送信マクロコード解説
では、VBAコードを簡単に解説していきます。
Excelマクロ:第1ブロック解説
Sub メール添付一斉送信()
Dim myOLApp As Object
Dim myDATA As MailItem
Dim GYOU As Long
Dim Ans As Variant
この部分は、最初に定義づけを行っています。
マクロというものは最初に
定義を宣言をする必要があります。
Dim myOLApp As Object=「これから出てくる”myOLApp”っていうのは”Objectオブジェクト)”だよ」
とコンピュータに教えてあげているんです。
同じように
Dim myDATA As MailItem=「”myDATA”は”MailItem(メール)”のことだよ」
Dim GYOU As Long=「”GYOU”は”Long(長い整数)”のことだよ」
Dim Ans As Variant=「”Ans”は”Variant(すべてのデータ)”のことだよ」
と定義しています。
これはマクロのお作法なのであまり深く考えず
先に進みましょう。
Ans = MsgBox("マクロを実行しますか?", vbYesNo)
If Ans = vbNo Then Exit Sub
ここは、このようなメッセージボックスを出すという意味です。
If Ans = vbNo Then Exit Sub
もし、Noボタンが選択されたら、Exit Sub(マクロを終了します)
Yesボタンが押されたら、続いてのコードに進みます。
Excelマクロ:第2ブロック解説
'メールを新規作成
Set myOLApp = CreateObject("Outlook.Application")
For i = 13 To Range("B65536").End(xlUp).Row
Set myDATA = myOLApp.CreateItem(olMailItem)
ここは、メールを新規作成しています。
Set myOLApp = CreateObject(“Outlook.Application”)
Set myDATA = myOLApp.CreateItem(olMailItem)
のあたりですね。
何となく意味合いはわかりますでしょうか?
このブロックのポイントは
For i = 13 To Range(“B65536”).End(xlUp).Row
の部分です。
変数はマクロではよく出てくる考え方なので覚えておきましょう
マクロでは、繰り返し同じ作業をすることが多いと思いますが
i という変数を使うことで、繰り返し作業を実現しています。
例えば、
For i = 13 To15
となっていれば、
iという変数は13から始まって15までを順番に繰り返していくという事になります。
今回のサンプル画像を見てみてください。
B列の13行目から15行目までメールアドレスが記載されていますね。
なので、変数を使って
13行目から15行目までを順番にメール作成をするという事です。
今回のコードは15の部分が
「Range(“B65536”).End(xlUp).Row」
となっていますよね?
「Range(“B65536”).End(xlUp).Row」
は何を意味しているのか解説しますね!
End(xlUp).Row
これもよく出てくるコードなので覚えておいたほうがいいです。
今回のサンプルでは15行目までしかメールアドレスが入っていませんが、
ここは、場合によって何行目まで入るかわかりませんよね?
もしかしたら20行目までかもしれないし100行目までかもしれない。。。
なので
End(xlUp).Rowで、入力されている最終行を調べているんです。
B列の65536行目から「Ctrl+Shift+↑」を押してみてください。
B列で入力値がある場所までセルを選択してくれますよね。
この作業を実施して、最終行を調べています。
Excelマクロ:第3ブロック解説
'添付ファイルの追加
myDATA.Attachments.Add Range("D8").Value & "\" & Range("F" & i).Value & ".xlsx"
'宛先アドレスの件名本文追加
myDATA.TO = Range("B" & i).Value
myDATA.Subject = Range("C" & i).Value
myDATA.Body = Range("D" & i).Value
'メール送信
myDATA.Send
Next
上記で解説してきたように
iという変数は13から始まりますので
まずは、13に置き換えて読んでいきましょう。
myDATA.Attachments.Add Range(“D8”).Value & “\” & Range(“F” & 13).Value & “.xlsx”
D8セルにはファイルが格納されているフォルダ名が入力されているので
D8に記載のフォルダ内にある、F13の名称の“.xlsx”データを添付する
という意味です。
もし、添付ファイルの種類がワードなのであれば
“.xlsx”の部分を“.docx“と変更すればOKです。
myDATA.TO = Range(“B” & 13).Value
myDATA.Subject = Range(“C” & 13).Value
myDATA.Body = Range(“D” & 13).Value
の意味は、見たままのとおり
TO(宛先は)=B13セルの内容
Subject(件名は)=C13セルの内容
Body(本文は)=D13セルの内容
でメールを送信するという事ですね。
そして
Next(次のメールは)、変数の「 i 」が14になります。
今回は15行目が最終行なので、15行目まで繰り返すというわけです。
人事業務効率化のお役立ちツールを無料公開中
今回は、
ExcelVBAでOutlookメールを操作し添付ファイルを一斉送信する方法を紹介しました。
このサイトでは、人事業務の効率化に役立つツールをたくさん紹介しています。
主にExcelマクロを使った無料で導入できるツールになりますので是非取り入れてみてください。
ここまで読んでいただきありがとうございました。