
No.2ベストアンサー
- 回答日時:
>「具体的な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 …

詳しい回答ありがとうございました。
お礼遅くなりました。
お示し頂いたプログラムで、自分宛のメール1件の送信は成功しました。
でも今、時間がとれずその先に進めませんが、別の機会にチャレンジしたいと思います。
ありがとうございました。
No.3
- 回答日時:
>お示し頂いたプログラムで、自分宛のメール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」というファイルを添付します。
#お分かりにならないことがありましたら、補足質問なさってください。
No.1
- 回答日時:
応答ありがとうございます。
紹介くださったページ読んで、試してみました。
が、「VBAを自分で書けば、目的の操作が可能(?)なこと」はわかったつもりですが、「具体的なVBA」が書けません(悲)。
そのまま使えるソースやフリーソフトご存知ならお教えください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
彼女のことが好きすぎて彼女の...
-
検便についてです。 便は取れた...
-
風俗店へ行く前のご飯
-
エクセルで空白セルを含む列の...
-
Excel 数値の前の「 ' 」を一括...
-
勃起する時って痛いんですか? ...
-
腕を見たら黄色くなってる部分...
-
2つの数値のうち、数値が小さい...
-
VLOOKUP関数を使用時、検索する...
-
増減表のプラスマイナスの符号...
-
レインボーシックスシージをし...
-
採血後の内出血 先週の金曜日に...
-
足がまだら模様になります。ど...
-
一番多く表示のある値(文字列...
-
MIN関数で空白セルを無視したい...
-
アクエリアスが苦く感じる
-
値が入っているときだけ計算結...
-
病院側から早く来てくださいと...
-
イタリアから帰国する際、肉製...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
検便についてです。 便は取れた...
-
値が入っているときだけ計算結...
-
彼女のことが好きすぎて彼女の...
-
尿検査前日に自慰行為した時の...
-
VLOOKUP関数を使用時、検索する...
-
Excel 数値の前の「 ' 」を一括...
-
精液の落とし方を教えてください
-
【Excelで「正弦波」のグラフを...
-
2つの数値のうち、数値が小さい...
-
風俗店へ行く前のご飯
-
精子に血が・・・
-
リンク先のファイルを開かなく...
-
小数点以下を繰り上げたものを...
-
EXCELで条件付き書式で空白セル...
-
イタリアから帰国する際、肉製...
-
excelでsin二乗のやり方を教え...
-
腕を見たら黄色くなってる部分...
-
病院側から早く来てくださいと...
-
ワードのページ番号をもっと下...
おすすめ情報