
VBAでメール作成(選択した複数の宛先へのメール作成)
ExcelのVBAを使用してOutlookのメールを作成したいのですが、初心者のため上手く動きません。
想定している動作は別シート("メールアドレス")に入力し
てあるアドレスをインボックスで複数選択しそのアドレスを宛先に追加したいです。
1人分のアドレスなら取得できますが、複数取得ができません。。
詳しい方いらっしゃいましたらご教示ください。
携帯で送っているので一部文字化けしてます。
すみません。。
Sub Test()
'Outlookオブジェクトの変数宣言
Dim outlookObj As Outlook.Application
Set outlookObj = New Outlook.Application
Dim MM, M, N As Range
'メール送信用のオブジェクト作成
Dim mailObj As Outlook.MailItem
Set mailObj = outlookObj.CreateItem(olMailItem)
Set MM = Application.InputBox(Prompt:="アドレス選択して下さい", Type:=8)
Set M = Worksheets("メール内容").Cells(5, 2) '件名 選択
Set N = Worksheets("メール内容").Cells(9, 2) '本文 選択
'メール送信内容の作成
With mailObj
.To = MM 'メール宛先
.Subject = M 'メール件名
.Body = N 'メール本文
.BodyFormat = olFormatPlain 'メール形式に設定
.Display
End With
End Sub
No.1ベストアンサー
- 回答日時:
こんばんは、
>別シート("メールアドレス")に入力してあるアドレスを
>インボックスで複数選択しそのアドレスを宛先に追加したいです。
1人分のアドレスなら取得できますが、複数取得ができません。
そうですね。この場合、Application.InputBoxは不向きかもしれません。
ちなみにOutlookの宛先のアドレスを複数につなげると xxxxx@xxxx.com; yyyyyyy@yyyyyy.ne.jp の
ようになります。 ; セミコロン、半角スペース だったかと。。
また、文字数制限もありますので、この方法の場合は注意が必要です。
セルの値を全て宛先アドレスにするならセル範囲をForなどで繰り返し処理をすれば良いです。
セルの値を直接の場合
For i = 1 To 20
MM = MM & "; " & cells(i,1).value
Next i
MM = Right(MM, Len(MM) - 1)
どうしてもApplication.InputBoxなら、
Rangeを受け取ってセルの値を加工するコードが必要になります。
セル選択時、飛びセルを選択する場合は , 入力です。では、
InputBoxで選択したセル範囲の値を;で繋げる。(セルの値は、メールアドレス)
Cbm_Value_Selectの内容をSet MM = Application.InputBox(Prompt:="アドレス選択して下さい", Type:=8)
部分に置換 Function ProcessingFucは、必要です。
Application.InputBoxの場合
Sub Cbm_Value_Select()
Dim rng As Range, MM As String
Set rng = Application.InputBox(Prompt:="アドレス選択して下さい", Type:=8)
If Not rng.Cells.Count > 0 Then Exit Sub
MM = ProcessingFuc(rng, rng.Cells.Count)
MM = Right(MM, Len(MM) - 1) ’アドレスが加工され変数に代入されます。
MsgBox (MM) 'テスト用
End Sub
Function ProcessingFuc(rng As Range, n As Long) As String
Dim i As Long
For i = 1 To n
ProcessingFuc = ProcessingFuc & "; " & rng(i)
Next
End Function
あと、気になる点として、、
Dim MM, M, N As Range
これ全てString 型で良いのでは? 使われ方が文字列
Dim MM As String, M As String, N As String
ただし新規に
Dim rng As Range が必要
更に別方法としては、選んで登録したい場合は、UserFormを使う?
例えば添付図のような感じで、、
インデックス1のシートA1からA20にある値(メールアドレス)をリストボックスに登録して
クリックで選択(複数)し、実行ボタンで変数MMにアドレスをつなげ代入します。
UserFormの中のコードは、、
Private Sub UserForm_Initialize()
ListBox1.MultiSelect = fmMultiSelectMulti
ListBox1.List = Sheets(1).Range("A2:A20").Value
MsgBox "登録件数:" & ListBox1.ListCount 'テスト
End Sub
Private Sub CommandButton1_Click()
Dim i As Long, MM As String
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
MM = MM & "; " & ListBox1.List(i)
End If
Next i
MM = Right(MM, Len(MM) - 1)
MsgBox MM 'テスト
Unload Me
End Sub
注)重要:UserFormの場合、変数 MMの扱いは調べてください。
上記コードは、内容を理解し使ってください。
エラー処理は、適所行ってください。

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
血液検査報告書の「弱乳び」
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
2つの数値のうち、数値が小さい...
-
血液検査の結果が悪くefgrの値...
-
風俗店へ行く前のご飯
-
病院側から早く来てくださいと...
-
小数点以下を繰り上げたものを...
-
excel関数で TRUEやFALSEについて
-
検査結果について電話連絡って...
-
値が入っているときだけ計算結...
-
勃起する時って痛いんですか? ...
-
テスターで断線を調べる方法教...
-
男性に質問 お尻の穴を見せた...
-
検便を取ったのですが、棒から...
-
Excel条件付書式(残業45時間以...
-
MIN関数で空白セルを無視したい...
-
急いでます!病院から患者様へ...
-
Excel 0目標に対して数字があ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
アトピー性皮膚炎
-
コロナになるのが死ぬほど怖い...
-
検便についてです。 便は取れた...
-
24歳、女性です。性欲が強すぎ...
-
未成年の従姉妹が自分の真似絵...
-
頭痛に関する質問です。現在高...
-
血液検査の結果が悪くefgrの値...
-
肝臓がんになりたいです。肝機...
-
何故 削除され続けるか、
-
◎敢えてノンジャンルカテゴリー...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
風俗店へ行く前のご飯
-
2つの数値のうち、数値が小さい...
-
病院側から早く来てくださいと...
-
EXCELで条件付き書式で空白セル...
-
Excel 数値の前の「 ' 」を一括...
-
リンク先のファイルを開かなく...
-
値が入っているときだけ計算結...
おすすめ情報