[三流君] −−> [VBAで楽しく] −−> [VBA Outlook 操作]
−−> No.056 Outlookから複数のアドレスにBCC送信

Outlookから複数のアドレスにBCC送信

メルマガ発行内容

<Outlookから複数のアドレスにBCC送信>

こんにちは、 今月は読者減らさないようにがんばろう と 思っている。 三流プログラマーKen3です。 そして、今日の発行でまた減って行く、、 なんていつもの暗い前置きは置いといて、 今回は、 Outlookから複数のアドレスにBCC送信 を軽く書きたいと思います。 へぇ〜、そうなんだぁ程度に、気楽に読んでください。 /* * 1.今回のキッカケ */ In message "質問", 初心者 さん wrote... >EXCELからOUTLOOKを起動してEXCELシートに書かれている複数のアドレスにBCC >で送信していんですが、どうしたらいいんですか? ---- BCC送信かぁ、、、 タイトルが質問で名前が初心者かぁ。 メールの送り元はdion.ne.jpで@Hotmail.comかぁ なんて関係無いことは置いといて、 /* * 2.質問元のサンプル */ 前回と同じだけど(行数、ボリューム稼ぎしてもイミ無いから参照にしろって?) Sub testSEND送信() Dim oApp As Object 'アプリケーションオブジェクト Dim objMAIL As Object 'メールのオブジェクト Dim strMOJI As String '本文 'アプリケーションオブジェクトの作成 Set oApp = CreateObject("Outlook.Application") Set objMAIL = oApp.CreateItem(0) 'olMailItem=0 strMOJI = "こんにちは" & vbCrLf _ & "プログラマーの愚痴、教えまっせ?" & vbCrLf _ & "http://www.ken3.org/ よろしく(笑)" objMAIL.To = "test@ken3.org" '宛先 objMAIL.Subject = "未承諾広告※(笑)" '件名 objMAIL.Body = strMOJI '本文の代入 objMAIL.Send '直接送信箱行き 'おまけでOutlook表示 Dim myNameSpace As Object Dim myFolder As Object Set myNameSpace = oApp.GetNameSpace("MAPI") Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダーを指定 myFolder.Display '表示 End Sub まず、アプリケーションオブジェクトの作成 Set oApp = CreateObject("Outlook.Application") 次に、メールアイテムを作成します。 Set objMAIL = oApp.CreateItem(0) 'olMailItem=0 本文を一時的に変数に保管して(直接でもいいですよ) strMOJI = "こんにちは" & vbCrLf _ & "プログラマーの愚痴、教えまっせ?" & vbCrLf _ & "http://www.ken3.org/ よろしく(笑)" こんな感じで、vbCrLfの改行を使って、作成してます。 データをメールアイテムにセットする objMAIL.To = "test@ken3.org" '宛先 objMAIL.Subject = "未承諾広告※(笑)" '件名 objMAIL.Body = strMOJI '本文の代入 見たまま?で、 .To 宛先 .Subject 件名 .Body 本文 をセットしてます。 objMAIL.Send '直接送信箱行き の.Sendプロパティです。 これで送信箱に行きます。 と送信箱にメールを保存しました。 /* * 3.BCCの複数宛先指定 */ やりたいことは、BCCで複数の宛先を指定することなので、 .TOを.BCCに変えただけです。 Sub testBCC送信() Dim oApp As Object 'アプリケーションオブジェクト Dim objMAIL As Object 'メールのオブジェクト Dim strMOJI As String '本文 'アプリケーションオブジェクトの作成 Set oApp = CreateObject("Outlook.Application") Set objMAIL = oApp.CreateItem(0) 'olMailItem=0 strMOJI = "こんにちは" & vbCrLf _ & "プログラマーの愚痴、教えまっせ?" & vbCrLf _ & "http://www.ken3.org/ よろしく(笑)" objMAIL.BCC = "test@ken3.org" 'BCCに変えただけ objMAIL.Subject = "未承諾広告※(笑)" '件名 objMAIL.Body = strMOJI '本文の代入 objMAIL.Send '直接送信箱行き 'おまけでOutlook表示 Dim myNameSpace As Object Dim myFolder As Object Set myNameSpace = oApp.GetNameSpace("MAPI") Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダーを指定 myFolder.Display '表示 End Sub objMAIL.BCC = "test@ken3.org" 'BCCに変えただけ なんでBCCとわかったんだよ、、、直感です。 じゃなくって、.Toがそのまま宛先だったので、 勇気をもって実験したら通りました。(できました) あっ、複数の宛先にBCCだっけ、 カンマで区切ったらできるのかなぁ? よし、やってみますか '文字列で宛先を作る strBCC = "test@ken3.org, excel@ken3.org, access@ken3.org" objMAIL.BCC = strBCC '宛先の文字列を渡す あれ?エラーだよ、、 strBCC = "test@ken3.org , excel@ken3.org , access@ken3.org" と、カンマを離してみるがダメ、、、う〜ん、、、 strBCC = "test@ken3.org ; excel@ken3.org ; access@ken3.org" と、セミコロン;で区切ったらうまく行きました。 あとは、固定値だけどセルからアドレスを取ってきて、 セミコロン区切りにして、.BCCにセットすれば出来上がりかなぁ。 BCCで送信する用途に少し危険なニオイを感じるけど(未承諾広告?に使う?) こんな感じです。 Sub testBCC送信() Dim oApp As Object 'アプリケーションオブジェクト Dim objMAIL As Object 'メールのオブジェクト Dim strMOJI As String '本文 'アプリケーションオブジェクトの作成 Set oApp = CreateObject("Outlook.Application") Set objMAIL = oApp.CreateItem(0) 'olMailItem=0 strMOJI = "こんにちは" & vbCrLf _ & "プログラマーの愚痴、教えまっせ?" & vbCrLf _ & "http://www.ken3.org/ よろしく(笑)" Dim strBCC As String 'BCC宛先の変数を定義 '文字列で宛先を作る strBCC = "test@ken3.org ; excel@ken3.org ; access@ken3.org" objMAIL.BCC = strBCC '宛先の文字列を渡す objMAIL.Subject = "未承諾広告※(笑)" '件名 objMAIL.Body = strMOJI '本文の代入 objMAIL.Send '直接送信箱行き 'おまけでOutlook表示 Dim myNameSpace As Object Dim myFolder As Object Set myNameSpace = oApp.GetNameSpace("MAPI") Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダーを指定 myFolder.Display '表示 End Sub /* * 4.おわりの挨拶 */ 今回は、OutLookアプリの操作でBCC送信でした。 ・.TOを.BCCにして、BCCの宛先にアドレスをセット ・複数アドレスは;セミコロンで区切る でした。 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。 ---------------------------------- 関連項目(ただのバックナンバー紹介) ---------------------------------- 2003/03/05 Outlookを操作してメールを送りたい ( http://www.ken3.org/backno/backno_vba12.html#55 を参照) で、 Outlookの起動と送信メールの作成を行いました。 1999/11/23 Excel VBA からOutLookデータを読む ( http://www.ken3.org/backno/backno_guchi05.html#22 を参照) で、 Excel97とOutLook97で少し遊んでました。 時間があったら、あわせてみて下さい。

フィードバック

VBA系の→[掲示板]←を覗く、質問を書き込む
Q.ちょっと疑問なんですが、BCCを利用して複数の人にメールを送信するとき、複数の人の部分が変動する場合、(何かのファイルを参照するまたは、セルに入力されている値(アドレス)を参照する場合)、どのようにすればいいのでしょうか?

A.セルの値を使用する方法で簡単なのが、
XXXX = Sheets("シート名").Range("B2") 
と書く方法です。
これで、B2セルのデータを取り出してます。

でも、実際は、B2セルに
aaa@xxxx.xx.xx ; bbb@xxxx.xx.xx ; ccc@xxx.xx.xx
とは入れなくて、通常は、
       A列      B列
1行目 名前     アドレス
2行目 アキラ   akira@xxxx.xx.xx
3行目 タロウ   taro@xxxx.xx.xx
4行目 ジロウ   xxxx@xxxx.xx.xx
  ・
 ・
  ・
999行目 XXX   XXXXXXXXXXXXXXX
と一覧表で管理していると思います。

なので、ループで、
strWORK = Sheets("シート名").Range("B2")  '先頭の人を入れる
For y = 3 to 999
   If Len(Sheets("シート名").Cells(y, "B")) = 0 Then  '文字数0か?
       exit For  'ループを抜ける
   End IF
   '文字があったら ; を前に付け+する
   strWORK = strWORK & ";" & Sheets("シート名").Cells(y, "B")
Next y
とかして、複数の文字を連結したりします。
そして出来上がったstrWORKをBCCに代入したりします。

チョット難しいですが、何かの参考となれば幸いです。

PS.さらに進むと実際はアドレスリストから指定したデータだけ送りたくなるので、
   C列に送信フラグを作り、
       A列      B列              C列
1行目 名前     アドレス          送信フラグ
2行目 アキラ   akira@xxxx.xx.xx   1
3行目 タロウ   taro@xxxx.xx.xx    0
4行目 ジロウ   xxxx@xxxx.xx.xx    1

と、C列が1だけ送りたかったり。
そんな時は、
strWORK = Sheets("シート名").Range("B2")  '先頭の人を入れる
For y = 3 to 999
   If Len(Sheets("シート名").Cells(y, "B")) = 0 Then  '文字数0か?
       exit For  'ループを抜ける
   End IF
   '文字があったら ; を前に付け+する
   'C列が1の時だけ
   If Sheets("シート名").Cells(y, "C") = 1 Then
       strWORK = strWORK & ";" & Sheets("シート名").Cells(y, "B")
   End If
Next y
なんて作ったりするのかなぁ・・・少し長い余談でした。

評価・感想

No.056を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る場合は下記に気軽に書いてください
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

ページフッター(リンクや広告など)


[三流君(TOP ken3.org へ戻る)]
-- [VBA系TOPへ]
---- [VBA系バックナンバー目次へ移動]
------ [VBAでIEを操作 CreateObject("InternetExplorer.application")]・・・実は当店一番人気、VBAでIEを操作するサンプルです
------ [VBAでOutlookの操作 CreateObject("Outlook.Application")]・・・Outlookを使い、メール関係の処理です
------ [Access から Excel 連携 CreateObject("Excel.Application")]・・・人気のAccessからExcelへデータ書き出しなどです
------ [AccessのUserForm/サブフォームを操作]・・・アクセスでフォームを使ったサンプルです
------ [Accessのレポートを操作]・・・レポートを操作してみました
------ [Access クエリー関係やその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
------ [Excel UserForm(ユーザーフォーム)を操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
------ [ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
------ [Excel関係 関数、その他]・・・その他Excel関係です
------ [VBAでテキストファイル(*.txt,*.html,*.csv)の操作]・・・テキストファイルを使ったサンプルです
------ [VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます


広告
-- [通販系の売れ筋広告へ] ←主に楽天やAmazonのランキングです
blog
-- [三流君の作業日記] ← 日々の作業を少々
-- [通販あしあと] ← 通販ページの足跡を一覧で羅列

書籍の購入

Webだけじゃさすがに勉強しきれないので、プログラミング関係の書籍も読んでみては??

コンピュータ書籍の発送がハヤイ専門店

コンピュータの本・専門店
種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。
お奨め本の目次を見るだけでも勉強になったり

amazon.co.jpでキーワード別チェック

下記、私が設定したキーワードですが、こんな感じで資料や書籍を探ってみては?
[VBA全体を把握する] -- やはり全体をさらっと見たいですよね。
[SQL関連でDB力UP] -- システムはデータベース設計が重要
[ADO接続を探る] -- VBAなのでADO接続を押さえておく
[Windows APIを探る] -- さらにAPIになて知ってれば強力だ!
[.NETを探る] -- と言っても時代は.NETに流れてるし
プログラミング以外でも知りたいことは多くって、
[人間関係] -- で、客先・上司、まわりに気を使い。
[プログラマーの自己啓発] -- プログラムだけじゃなくいろいろと向上したいよ
[コーチング・育成] -- 先輩になったら後輩(部下)の面倒をみてね。
そんなこんなでプログラマーっていろいろと大変なんだってば・・・