[[20200616135307]] 『VBAで複数のメールアドレスを宛先に入れたい.』(Kさん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAで複数のメールアドレスを宛先に入れたい.』(Kさん)

表題の件につきまして,ご教示いただきたいです.
操作するのはoutlookのメールでして,
Excelのワークシート上の記載は下記の様になっています.

A_B_______C________D________E________

  部署  社員番号 氏名   メールアドレス
  …   …    …   …    

定期的に対象となる者のメールアドレスを取得し,
その複数の対象者をメールの宛先に入れたいです.

作成したコードは下記の通りです.

Sub mail_sending()

    Dim objOutlook As Outlook.Application: Set objOutlook = New Outlook.Application
    Dim objMail As Outlook.MailItem: Set objMail = objOutlook.CreateItem(olMailItem)
    Dim wsMain As Worksheet, wsMailA As Worksheet: Set wsMain = Worksheets("メイン"): Set wsMailA = Worksheets("メールアドレス")
    wsMain.Activate 'ワークシートメインは対象者を取得するためのシートです.
                    'wsMailAは最初に図示させていただいたものです.
    Dim SB() As Long, i As Long, j As Long: j = 1: ReDim SB(Cells(Rows.Count, 2).End(xlUp).Row - 5 + 1)
    For i = 5 To Cells(Rows.Count, 2).End(xlUp).Row
        SB(j) = Left(Cells(i, 3), 6)
        j = j + 1
    Next 'ここまでが対象者の社員番号の取得を行うコードです.
    wsMailA.Activate 'ここから対象者のメールアドレスの取得を行います.
    Dim ARng As Range, BRng As Range
    Dim wsMailN As Worksheet: Set wsMailN = ThisWorkbook.Sheets("メール内容")
    j = 1
    For i = 4 To Cells(Rows.Count, 3).End(xlUp).Row
        For j = 1 To UBound(SB) - 1
            If Cells(i, 3) = SB(j) Then
                If ARng Is Nothing Then
                    Set ARng = Range("E" & i)
                Else
                    Set ARng = Union(ARng, Range("E" & i))
                End If
            End If
        Next
    Next

    With wsMailN
        objMail.To =ARng  ←ここが今回の問題点です.
        objMail.BodyFormat = olFormatPlain
        objMail.Body = .Range("C3").Value
        objMail.Display
    End With
    Set objOutlook = Nothing
    MsgBox "送信完了"

End Sub

__以上__

Unionを用いて,該当者全員が選択された状態となったことは確認できたのですが,「objMail.To =ARng」を実行したら,先頭の者一人分しか宛先に入っていませんでした.「objMail.To =」を複数使った場合は,最後の者しか反映されていませんでした.何とか該当者全員分のメールアドレスを一度に宛先に入れる方法はないでしょうか.

< 使用 Excel:Excel2016、使用 OS:Windows7 >


 複数の宛先に一括で送信する場合は、宛先を
 確か「;」で結合させる必要があったと思います。
 正確な情報は識者のレスを待つか、ネット検索
 してみてください。
(OK) 2020/06/16(火) 14:28

OKさま
お返事ありがとうございます.
ネット検索しても「;」に関する情報は見つけることができなかったので
ありがたいです.今のところ「Set ARng =,Range("E" & i).Value & ";"」
と試してみると,オブジェクトが必要です.となりまして,

objMail.To =range("E4");range("E5")
とするとエラーになってしまいます.

いまはその対処方法を検討中です.
(Kさん) 2020/06/16(火) 14:51


 Join関数を調べてみてください。
(OK) 2020/06/16(火) 15:02

OKさま

ありがとうございます!!!!!!!!1
無事に解決いたしました.
他の方にも役立つかもしれないので,
解決コードを以下に載せておきます.

Option Explicit

Sub mail_sending()

    Dim objOutlook As Outlook.Application: Set objOutlook = New Outlook.Application
    Dim objMail As Outlook.MailItem: Set objMail = objOutlook.CreateItem(olMailItem)
    Dim wsMain As Worksheet, wsMailA As Worksheet: Set wsMain = Worksheets("メイン"): Set wsMailA = Worksheets("メールアドレス")
    wsMain.Activate
    Dim SB() As Long, i As Long, j As Long: j = 1: ReDim SB(Cells(Rows.Count, 2).End(xlUp).Row - 5 + 1)
    For i = 5 To Cells(Rows.Count, 2).End(xlUp).Row
        SB(j) = Left(Cells(i, 3), 6)
        j = j + 1
    Next
    wsMailA.Activate
    Dim MA(): ReDim MA(wsMain.Cells(Rows.Count, 2).End(xlUp).Row - 5 + 1)
    Dim wsMailN As Worksheet: Set wsMailN = ThisWorkbook.Sheets("メール内容")
    j = 1
    For i = 4 To Cells(Rows.Count, 3).End(xlUp).Row
        For j = 1 To UBound(SB) - 1
            If Cells(i, 3) = SB(j) Then
                Set MA(j) = Range("E" & i)
            End If
        Next
    Next
    With wsMailN
        objMail.To = Join(MA(), ";")
        objMail.BodyFormat = olFormatPlain
        objMail.Body = .Range("C3").Value
        objMail.Display
    End With
    Set objOutlook = Nothing
    MsgBox "送信完了"

End Sub
(Kさん) 2020/06/16(火) 15:45


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.