エクセル・仕事効率化 PR

エクセルVBAでサンダーバードからメールを送る方法|半自動化も可

記事内に商品プロモーションを含む場合があります

サンダーバードって使いやすいですよね。

サンダーバードで自動化でメールが送れたらな~と思って色々と調べてみました。

Outlookを使ったメール操作のVBAマクロは多かったのですが、サンダーバードでメールを送るVBAマクロは、ウェブ上や、本を探しても断片的な情報が多く、コーディングにとても時間がかかってしまったので、自分でまとめました。

細かく場合分けをしているので、必要なVBAマクロをコピーして使って下さい。

ただサンダーバードはメールを作成する所まではできますが、「送信」ができないので、マクロを組むならOutlookの方がお勧めです。

目次

サンダーバードを立ち上げる

まず、VBAでサンダーバードを立ち上げるには、shell関数を用います。

sub Thunderbird_VBA()
Dim sPath as strings
Path = “””C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe”” -compose ”

Shell sPath
End Sub

 

宛先(To)を入れる

次に立ち上げたメールにbiginner@luck.co.jpという宛先がすでに入ったVBAを作成します。
※biginner@luck.co.jp は架空のアドレスです。

sub Thunderbird_VBA()Dim sPath as string
Dim mailadto as string

sPath = “””C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe”” -compose ”

mailadto = “biginner@luck.co.jp”
Shell sPath & “to=” & mailadto
End Sub

 

複数のToを入れる

立ち上げたメールに複数の宛先(TO)が入ったVBAを作成します。
参考に biginner@luck.co.jp と intermediate@luck.co.jp という宛先がすでに入ったVBAを作成します。

sub Thunderbird_VBA()Dim sPath as string
Dim mailadto as string

sPath = “””C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe”” -compose ”

mailadto = “biginner@luck.co.jp” & ” ; ” & “intermediate@luck.co.jp”
Shell sPath & “to=” & mailadto
End Sub

複数のTOを加えるには、メールアドレスの間をセミコロンで区切るだけで良いです。
mailadto = “biginner@luck.co.jp;intermediate@luck.co.jp” という書き方でももちろん上手く起動してくれます。

宛先及びccを入れる

sub Thunderbird_VBA()Dim sPath as string
Dim mailadto as string
Dim mailadcc as string

sPath = “””C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe”” -compose ”

mailadto = “biginner@luck.co.jp”
mailadcc = “intermidiate@luck.co.jp”

Shell sPath & “to=” & mailadto & “,” & “cc=” & mailadcc
End Sub

 

宛先及びcc、bccを入れる

sub Thunderbird_VBA()Dim sPath as string
Dim mailadto as string
Dim mailadcc as string
Dim mailadbcc as string

sPath = “””C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe”” -compose ”

mailadto = “biginner@luck.co.jp”
mailadcc = “intermidiate@luck.co.jp”
mailadbcc = “senior@luck.co.jp”

Shell sPath & “to=” & mailadto & “,” & “cc=” & mailadcc & “,” & “bcc=” & mailadbcc
End Sub

エクセルのセルから取得した値を用いる

たとえば、下記の様にSheet1のA1セルに[biginner@luck.co.jp]、A2セルに[intermidiate@luck.co.jp]、A3セルに[senior@luck.co.jp]が入っている場合、

下記の様に記述できます。

sub Thunderbird_VBA()Dim sPath as string
Dim mailadto as string
Dim mailadcc as string
Dim mailadbcc as string

sPath = “””C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe”” -compose ”

mailadto = WorkSheets(“sheet1”).Range(“A1”).value
mailadcc = WorkSheets(“sheet1”).Range(“A2”).value
mailadbcc = WorkSheets(“sheet1”).Range(“A3”).value

Shell sPath & “to=” & mailadto & “,” & “cc=” & mailadcc & “,” & “bcc=” & mailadbcc
End Sub

 

件名を入れる

続いて、件名を入れてみます。

sub Thunderbird_VBA()Dim sPath as string
Dim mailadto as string
Dim mailadcc as string
Dim substring as string

sPath = “””C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe”” -compose ”

mailadto = “biginner@luck.co.jp”
mailadcc = “intermidiate@luck.co.jp”
substring = “For Your Information!”

Shell sPath & “to=” & mailadto & “,” & “cc=” & mailadcc & “,” & “subject=” & substring
End Sub

 

件名、本文を入れる

さらに、本文を入れてみます。
VBA中に本文を記述したい時は、改行に”vbNewLine”という定数を用います。

sub Thunderbird_VBA()Dim sPath as string
Dim mailadto as string
Dim mailadcc as string
Dim substring as string
Dim bodystring as string

sPath = “””C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe”” -compose ”

mailadto = “biginner@luck.co.jp”
mailadcc = “intermidiate@luck.co.jp”
substring = “For Your Information!”
bodystring = “Hi Dear” & vbNewLine & vbNewLine & “Such a Nice day!”

Shell sPath & “to=” & mailadto & “,” & “cc=” & mailadcc & “,” & “subject=” & substring &”,”& “body=” & bodystring
End Sub

 

添付ファイルを送る

添付ファイルを送るには下記の様に記述します。
添付のファイル名は拡張子を含めたファイルのパス全文を記述する必要があります。

このVBAをテストする前には、 Cドライブ の Program Files に “test.txt” を作成して下さい

sub Thunderbird_VBA()Dim sPath as string
Dim mailadto as string
Dim mailadcc as string
Dim substring as string
Dim bodystring as string
Dim attachPath as string

sPath = “””C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe”” -compose ”

mailadto = “biginner@luck.co.jp”
mailadcc = “intermidiate@luck.co.jp”
substring = “For Your Information!”
bodystring = “Hi Dear” & vbNewLine & vbNewLine & “Such a Nice day!”
attachPath =”C:\Program Files\test.txt”
Shell sPath & “to=” & mailadto & “,” & “cc=” & mailadcc & “,” & “subject=” & substring & “,” & “body=” & bodystring & “,” & “attachment=” & attachPath
End Sub

 

複数の添付ファイルを送る

複数の添付ファイルを送るにはファイル名間に”,”(コンマ)を入れ、かつ全体を”‘”(アポストロフィ)で括ります。

このVBAをテストする前には、 Cドライブ の Program Files に “test.txt” 及び “test2.txt” を作成して下さい

sub Thunderbird_VBA()Dim sPath as string
Dim mailadto as string
Dim mailadcc as string
Dim substring as string
Dim bodystring as string
Dim attachPath as string

sPath = “””C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe”” -compose ”

mailadto = “biginner@luck.co.jp”
mailadcc = “intermidiate@luck.co.jp”
substring = “For Your Information!”
bodystring = “Hi Dear” & vbNewLine & vbNewLine & “Such a Nice day!”
attachPath =”‘” & “C:\Program Files\test.txt” & “,” & “C:\Program Files\test2.txt” & “‘”
Shell sPath & “to=” & mailadto & “,” & “cc=” & mailadcc & “,” & “subject=” & substring & “,” & “body=” & bodystring & “,” & “attachment=” & attachPath
End Sub

 

エクセルのセルから取得した値を用いる2

これまでVBAに記述してきた宛先(TO)、(CC)、添付ファイル、件名、本文の値をエクセルから取得します。
用いるエクセルデータは下記の通りです。

VBA中に直接本文を記述した時はvbNewLineという定数を用いましたが、セル中に記載する場合は、&Char(10)という定数を用います。

sub Thunderbird_VBA()Dim sPath as string
Dim mailadto as string
Dim mailadcc as string
Dim substring as string
Dim bodystring as string
Dim attachPath as string

sPath = “””C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe”” -compose ”

mailadto = WorkSheets(“sheet1”).Range(“C1”).value
mailadcc = WorkSheets(“sheet1”).Range(“C2”).value
attachPath = WorkSheets(“sheet1”).Range(“C3”).value
substring = WorkSheets(“sheet1”).Range(“C4”).value
bodystring = WorkSheets(“sheet1”).Range(“C5”).value

Shell sPath & “to=” & mailadto & “,” & “cc=” & mailadcc & “,” & “subject=” & substring & “,” & “body=” & bodystring & “,” & “attachment=” & attachPath
End Sub

 

複数のメールを作成する

最後に、複数メールを一度に作成する方法を紹介します。
ただVBAでは、サンダーバードでメールを作成する事は出来ますが、送る所までは出来ません。

そのため、あまり多くのメールの作成には向いてません。
複数メールを送る際は、Outlookを使うことを強くお勧めします。

今回は、下記のデータを用います。テストする場合は、このままコピー&ペーストすれば大丈夫だと思います。

TO CC 件名 本文
Senior1@luck.co.jp boss@luck.co.jp ○○に関しまして =”Senior1様”&CHAR(10)&CHAR(10)&”標題について、ご連絡致します。”
Senior2@luck.co.jp boss@luck.co.jp ○○に関しまして =”Senior2様”&CHAR(10)&CHAR(10)&”標題について、ご連絡致します。”
Senior3@luck.co.jp boss@luck.co.jp ○○に関しまして =”Senior3様”&CHAR(10)&CHAR(10)&”標題について、ご連絡致します。”
Senior4@luck.co.jp boss@luck.co.jp ○○に関しまして =”Senior4様”&CHAR(10)&CHAR(10)&”標題について、ご連絡致します。”
Senior5@luck.co.jp boss@luck.co.jp ○○に関しまして =”Senior5様”&CHAR(10)&CHAR(10)&”標題について、ご連絡致します。”

 

sub Thunderbird_VBA()Dim sPath as string
Dim mailadto as string
Dim mailadcc as string
Dim substring as string
Dim bodystring as string
Dim i as Integer
sPath = “””C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe”” -compose ”

For i = 2 to 6
mailadto = WorkSheets(“sheet1”).cells( i , “A” ).value
mailadcc = WorkSheets(“sheet1”).cells( i , “B” ).value
substring = WorkSheets(“sheet1”).cells( i , “C” ).value
bodystring = WorkSheets(“sheet1”).cells( i , “D” ).value

Shell sPath & “to=” & mailadto & “,” & “cc=” & mailadcc & “,” & “subject=” & substring & “,” & “body=” & bodystring & “,”
Next i
End Sub

ABOUT ME
カフェインレス
いま日本では、残業するのがアタリマエ。仕事はしんどくて当然。みたいな風潮がありませんか? ぼくには娘がいるのですが、将来、社会に対して暗い気持ちになってしまったらイヤだな、と。 定時で帰るのを当然のこととするために、「本質的な技術」や「小手先のテクニック」を紹介しております。 仕事に慣れたところで、10-20%程度しか仕事は早くなりません。エクセルを学んだり、考え方を変えると90%以上の業務時間が短縮ができる事があります。 仕事って人生で一番時間を使うことなので、その仕事のうちの「作業」だけでも自動化できれば、仕事のクオリティは段違いになります。 あなたの仕事のステップを一段階上げるために。また、毎日にゆとりをもたらすための一助になりたいと思っています。