[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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
objMail.To =range("E4");range("E5")
とするとエラーになってしまいます.
いまはその対処方法を検討中です.
(Kさん) 2020/06/16(火) 14:51
Join関数を調べてみてください。 (OK) 2020/06/16(火) 15:02
ありがとうございます!!!!!!!!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.