dポイントプレゼントキャンペーン実施中!

相手のアドレス、名前、用件が1行毎に書かれたエクセルファイルがあります。
差込印刷のように、定型文の要所要所にエクセルの各セルの値を埋め込んだメールを一括して送信したいのですが、やり方がわかりません。
たとえば、10行あれば、メールが10箇所に送信したいのです。

A 回答 (3件)

>「具体的なVBA」が書けません(悲)。


>そのまま使えるソースやフリーソフトご存知ならお教えください。
 そうですねぇ。フリーソフトならあるかも知れませんが、大した VBA ではありませんので、ご自分で書かれてもよいかと存じます。

 先ず、お使いの OS(オペレーションシステム)に依存します。
※OS が Windows 2000 より前のバージョンでしたら、この方法は無効です!! ここで読み終えて、フリーソフトをお探しください。

 「そのまま使えるソース」とはお書きですが、使用条件によって当然ソース(コード)も変わってきますので、一つずつ検証をしながらコードを書いていくべきかと存じます。

 さて、本題に入りますが。。。

>相手のアドレス、名前、用件が1行毎に書かれたエクセルファイルがあります。
>差込印刷のように、定型文の要所要所にエクセルの各セルの値を
>埋め込んだメールを一括して送信したい
>10行あれば、メールが10箇所に送信したい

 例えば、1行目に「名前・相手のアドレス・用件(要所要所に埋め込む値)」という見出しがあって、「名前」がA列、「相手のアドレス」がB列、「要所要所に埋め込む値」が「用件1」C列・「用件2」D列・「用件3」E列に書かれているとするとします。
 このようなプログラムを書く時は、先ずテストを何回もしてみることが大切で、相手先にテストメールが届いては迷惑になりますので、ご自分のメールアドレスでテストします。
 そこで、2行目A列~E列に、それぞれ「あなたのお名前」・「あなたのメールアドレス」・「あああ」・「いいい」・「ううう」と入力してください。
 ここでは「あなたのお名前」は「田中太郎」、「あなたのメールアドレス」は「hoge@hoge.com」として説明いたします。
 実際にテストをされる時には本当の「あなたのお名前」・「あなたのメールアドレス」を書いてくださいね。

 ここで、送付先のメールアドレスは
Cells(2, 1).Value & "様<" & Cells(2, 2).Value & ">"
と記述することによって、「田中太郎様<hoge@hoge.com>」という値になります。
 「差込印刷のように」というのは「本文」のことかと存じますが、これは、
"定型文1" & Cells(2, 3).Value & "定型文2" & Cells(2, 4).Value & _
"定型文3" & Cells(2, 5).Value & "定型文4"
と記述することによって、「定型文1あああ定型文2いいい定型文3ううう定型文4」という値になります。

 本文の間に改行を入れたい場合は、「vbCrLf」を書いて
"定型文1" & Cells(2, 3).Value & "定型文2" & Cells(2, 4).Value & vbCrLf & _
"定型文3" & Cells(2, 5).Value & "定型文4"
と記述することによって、「
定型文1あああ定型文2いいい
定型文3ううう定型文4
」という値になります。

 さて、前振りはここまでにして、実際にメールを送信してみましょう。
 テストですので、新規ブックで試してみましょうね。
 また、本当の「あなたのお名前」・「あなたのメールアドレス」を書いてくださいね。

1)エクセルシートの1行目A列~E列に、それぞれ「名前」・「相手のアドレス」・「用件1」・「用件2」・「用件3」と入力し、2行目A列~E列に、それぞれ「あなたのお名前」・「あなたのメールアドレス」・「あああ」・「いいい」・「ううう」と入力します。
2)[Alt] + [F11] で VBE(Visual Basic Editor)を開きます。
3)[挿入(I)] - [標準モジュール(M)] で「標準モジュール」の コードウィンドウ を開きます。
4)現われたコードウィンドウに下記コードを貼り付けます。
 なお、Thunderbird のメニューの [ツール(T)] - [アカウント設定(C)] で 左側のリストの一番下にある [送信 (SMTP) サーバ] をクリックし、「あなたのメールアドレス」をクリックして、その下にある [サーバ名]、これを下記の「●●●」と差し替えてください。
 この文字列は、例えば Yahoo! メールでしたら「smtp.mail.yahoo.co.jp」のような文字列です。
 また、
oMsg.From = "あなたのお名前<あなたのメールアドレス>"
の行は、「差出人」の欄になりますので「様」を付けずに、
oMsg.From = "田中太郎<hoge@hoge.com>"
のような書式になるように、本当のお名前(会社名?)とメールアドレスで書いてください。
5)[F5] キーを押下してください。マクロが実行されます。
6)Thunderbird で [F5] キーを押下してください。
 「件名」という件名のメールがあなたから届いていたらテスト成功です。

'-------------------------------------------------------------------
Sub CDOでメール送信()
 Dim oMsg
 Set oMsg = CreateObject("CDO.Message")
 oMsg.From = "あなたのお名前<あなたのメールアドレス>"
 oMsg.To = Cells(2, 1).Value & "様<" & Cells(2, 2).Value & ">"
 oMsg.Subject = "件名"
 oMsg.TextBody = "定型文1" & Cells(2, 3).Value & "定型文2" & _
  Cells(2, 4).Value & vbCrLf & "定型文3" & Cells(2, 5).Value & "定型文4"
 oMsg.Configuration.Fields.Item("ht" & _
  "tp://schemas.microsoft.com/cdo/configuration/sendusing") = 2
' oMsg.Configuration.Fields.Item("ht" & _
  "tp://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
 oMsg.Configuration.Fields.Item("ht" & _
  "tp://schemas.microsoft.com/cdo/configuration/smtpserver") = "●●●"
 oMsg.Configuration.Fields.Item("ht" & _
  "tp://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
 oMsg.Configuration.Fields.Item("ht" & _
  "tp://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = False
 oMsg.Configuration.Fields.Update
 oMsg.Send
End Sub
'-------------------------------------------------------------------

 先ず、上記の実験をしていただいて、成功したか否かをお知らせください。
 成功した場合は、更に詳しいコードの記述法をお知らせいたします。

 なお、前回答で「Excel でお仕事!」から参照ページを呈示しましたが、私は、そこにも書いてある「実行時バインディングの方法」で行なっております。
 これにつきましては、プログラム言語が異なります(VBA ではありません)が、流用ができますので、下記をご覧ください。
●Windows標準機能とWSHを使ってメールを送信する
http://www.atmarkit.co.jp/fwin2k/win2ktips/428ws …
「Thunderbirdで一括送信」の回答画像2
    • good
    • 0
この回答へのお礼

詳しい回答ありがとうございました。
お礼遅くなりました。
お示し頂いたプログラムで、自分宛のメール1件の送信は成功しました。
でも今、時間がとれずその先に進めませんが、別の機会にチャレンジしたいと思います。
ありがとうございました。

お礼日時:2009/06/14 09:21

>お示し頂いたプログラムで、自分宛のメール1件の送信は成功しました。


 では、次のステップに進みましょう。
 これもテストですから、送信先の「メールアドレス」だけはすべてあなたの メールアドレス にしてください。
 「名前」の方は「麻生太郎」でも「バラク・オバマ」でも何でも構いません(あたなのメールアドレスで「麻生太郎様」や「バラク・オバマ様」というメールが届くだけのことです)。

【準備】
・1行目は前回答と同様です。
・3行目以降にも2行目と同じような内容を書きます(ただし、B列はすべて「あなたのメールアドレス」)。
 何行目まででも構いません。
・A列の「名前」、C・D・E列の「用件1・2・3」の欄にはそれぞれ超テキト~な内容を書いておきます。

【VBA】
>相手のアドレス、名前、用件が1行毎に書かれた
>差込印刷のように、定型文の要所要所にエクセルの各セルの値を埋め込んだ
 応用が利く様に [回答番号:No.2] の コード を元に変更箇所のみ書いてみます。

・「Dim i As Integer」の行を追加し「oMsg.to」~「oMsg.Send」までの行を
For i = 2 To Range("A1").End(xlDown).Row
Next
で挟む。

 つまり、
For i = 2 To Range("A1").End(xlDown).Row
 oMsg.to = ~~~
 ・・・・・・・・
 oMsg.Send
Next

・「Cells(2, 」をすべて「Cells(i, 」に変更する。

 以上で、2行目からA列に値の入力されている最後の行まで、「1行毎に書かれた」「相手のアドレス、名前、用件」に基づいて、「差込印刷のように」「要所要所にエクセルの各セルの値を埋め込んだメールを一括して送信」します。


 なお、
oMsg.Subject = "件名"
のところは、
oMsg.Subject = Cells(i, ~).Value  '「~」は列番号
のような記述をすれば、セルの値から個々に「件名」を設定することもできます。

 また、
oMsg.TextBody = ~~~
のところは、メール本文全体が1つのセルに格納されているような場合でしたら、例のようなまどろっこしい書き方をしなくても、
oMsg.TextBody = Cells(i, ~).Value  '「~」は列番号
で十分です。

 「oMsg.Configuration.Fields」の各行は、おまじないですので、そのまま書いておいてください。


 なおなお、「添付ファイル」がある場合には、
oMsg.AddAttachment "D:\hoge\hoge\hoge.xls"
oMsg.AddAttachment "D:\hoge\hoge.txt"
のように指定すれば、幾つでも添付ファイルを添付することができます。
 この場合も「"D:\hoge\~~"」の部分は、セルの値から引っ張ってくることもできますし、変数に格納して添付ファイル名を指定することもできます。

例1)セルの値から引っ張ってくる場合
oMsg.AddAttachment Cells(i, ~).Value

例2)変数に格納して添付ファイル名を指定する場合
Dim MyMonth As String
MyMonth = IIf(Day(Date) > 15, Format(DateAdd("m", 1, Date), "yy-mm"), Format(Date, "yy-mm"))
oMsg.AddAttachment "D:\hoge\hoge" & MyMonth & ".txt"

 この場合、今月15日までは、「D:\hoge\hoge09-06.txt」というファイルを、15日を過ぎると「D:\hoge\hoge09-07.txt」というファイルを添付します。


#お分かりにならないことがありましたら、補足質問なさってください。
    • good
    • 0

 下記をご参考に。

。。

●CDOでメール送信
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
    • good
    • 0
この回答へのお礼

応答ありがとうございます。
紹介くださったページ読んで、試してみました。
が、「VBAを自分で書けば、目的の操作が可能(?)なこと」はわかったつもりですが、「具体的なVBA」が書けません(悲)。
そのまま使えるソースやフリーソフトご存知ならお教えください。

お礼日時:2009/05/31 00:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!