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

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

A 回答 (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の扱いは調べてください。

上記コードは、内容を理解し使ってください。
エラー処理は、適所行ってください。
「VBAでメール作成(選択した複数の宛先へ」の回答画像1
    • good
    • 0
この回答へのお礼

助かりました

丁寧に教えていただき
ありがとうございます!
頑張ってみます!

お礼日時:2020/03/17 22:04

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A