
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で質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) outlookで宛先が異なるメールを一括送信する方法 outlookで200人それぞれをtoに指定し 2 2023/08/03 21:24
- Gmail gmailで独自ドメインアドレスのメールが届かない件 1 2023/08/25 23:24
- Excel(エクセル) エクセル、画像ファイル名の書かれたセル(複数個所)に画像を一括で表示させる方法 1 2023/04/19 00:19
- その他(Microsoft Office) エクセルで差し込み印刷する方法 1 2022/05/14 18:40
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Outlook(アウトルック) アイホンで撮った写真を一枚だけPCに移し画像を縮小してWebメールに添付して送信する方法 1 2022/04/22 15:33
- Excel(エクセル) 【マクロ】webアドレスにて指定されたCSVファイル【excelソフト表示】を印刷する件 1 2023/02/15 01:52
- その他(メールソフト・メールサービス) PCでメールは発信について 6 2022/08/13 09:23
- その他(メールソフト・メールサービス) サンダーバードでメールが受信されない 10 2022/03/24 17:00
- その他(メールソフト・メールサービス) 「Thunderbirdメール」の送信文字のフォントや色の変更 3 2023/03/17 16:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
風俗店へ行く前のご飯
-
精液の落とし方を教えてください
-
イタリアから帰国する際、肉製...
-
精子に血が・・・
-
最近、飲酒すると手のひらが真...
-
勃起する時って痛いんですか? ...
-
エクセルで空白セルを含む列の...
-
【Excelで「正弦波」のグラフを...
-
EXCELで条件付き書式で空白セル...
-
値が入っているときだけ計算結...
-
検便を取ったのですが、棒から...
-
テスターで断線を調べる方法教...
-
EXCELで式からグラフを描くには?
-
「Q.C. PASSED」とは?
-
MIN関数で空白セルを無視したい...
-
エクセルの値を元に図形の色を...
-
アクエリアスが苦く感じる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
尿検査前日に自慰行為した時の...
-
至急!尿検査前日にオナニーし...
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
値が入っているときだけ計算結...
-
リンク先のファイルを開かなく...
-
EXCELで条件付き書式で空白セル...
-
2つの数値のうち、数値が小さい...
-
VLOOKUP関数を使用時、検索する...
-
尿検査の前日は自慰控えたほう...
-
MIN関数で空白セルを無視したい...
-
小数点以下を繰り上げたものを...
-
風俗店へ行く前のご飯
-
エクセルで空白セルを含む列の...
-
Excel 数値の前の「 ' 」を一括...
-
【Excelで「正弦波」のグラフを...
-
納豆食べた後の尿の納豆臭は何故?
-
EXCELで式からグラフを描くには?
-
ある範囲のセルから任意の値を...
おすすめ情報