複数宛先への個別メールを自動作成するExcelファイルを作成してみました。
画像添付にも対応しています。
AutoCreateMailMagazine
1 file(s) 31.43 KB
このエクセルファイルの作り方
①マクロを使えるようにする
「マクロを使えるようにする」を参照
②ボタンを配置する
※ ボタンの配置方法は「表を複数の条件で絞り込む②」を参照
③ボタン配置時の以下の画面で「マクロ名」を「CreateEmail」として「新規作成」を押す
④ 「Microsoft Visual Basic for Applications」にて以下のコードを記載
Sub CreateEmail() Dim oApp As Object Dim objMAIL As Object Dim subjectBodyWorksheet As Object: Set subjectBodyWorksheet = ThisWorkbook.Worksheets("件名・本文") Dim subject As String: subject = subjectBodyWorksheet.Cells(1, 2).Value Dim body As String: body = subjectBodyWorksheet.Cells(2, 2).Value Dim mailMagazinePath As String: mailMagazinePath = subjectBodyWorksheet.Cells(3, 2).Value Dim firstRow As Long: firstRow = 2 Dim lastRow As Long: lastRow = ThisWorkbook.Worksheets("宛先リスト").Cells(Rows.Count, 1).End(xlUp).Row Dim nameRow As Integer: nameRow = 1 Dim mailAddressRow As Integer: mailAddressRow = 2 '画像コピー Dim picture As shape: Set picture = CopyPicture(mailMagazinePath) '宛先分繰り返し For y = firstRow To lastRow Dim addressListWorksheet As Object: Set addressListWorksheet = ThisWorkbook.Worksheets("宛先リスト") '氏名とメールアドレス取得 Dim name As String: name = addressListWorksheet.Cells(y, nameRow).Value Dim mailAddress As String: mailAddress = addressListWorksheet.Cells(y, mailAddressRow).Value 'メールアドレス列がからの場合は飛ばす If mailAddress = "" Then GoTo Continue End If 'メールオブジェクト生成 On Error Resume Next Set oApp = GetObject(, "Outlook.Application") On Error GoTo 0 If oApp Is Nothing Then Set oApp = CreateObject("Outlook.Application") oApp.GetNamespace("MAPI").GetDefaultFolder(6).display End If Set objMAIL = oApp.CreateItem(0) '変数の置換 Dim adjustBody As String: adjustBody = body adjustBody = Replace(adjustBody, "&Name", name) '各メールの要素をセットして表示 With objMAIL .To = mailAddress .subject = subject .body = adjustBody .BodyFormat = 3 .display End With '最終位置を取得して画像を貼り付け If Not (picture Is Nothing) Then Dim endPosition As Integer: endPosition = objMAIL.GetInspector.WordEditor.Characters.Count - 1 oApp.ActiveInspector.WordEditor.Range(endPosition, endPosition).Paste Application.CutCopyMode = True End If '★自動で送信したい場合は↓の「'」を外してください★ 'objMail.Send Continue: Next y '画像シートの画像を削除 If Not (picture Is Nothing) Then picture.Delete End If Set objMAIL = Nothing Set oApp = Nothing End Sub Function CopyPicture(ByVal mailMagazinePath As String) As shape If mailMagazinePath = "" Then Exit Function End If '画像を画像シートに配置 Dim picture As shape: Set picture = ThisWorkbook.Worksheets("画像").Shapes.AddPicture(Filename:=mailMagazinePath, _ LinkToFile:=True, _ SaveWithDocument:=False, _ Left:=Selection.Left, _ Top:=Selection.Top, _ Width:=0, _ Height:=0) '画像を元のサイズにしてコピー With picture .ScaleHeight 1, msoTrue .ScaleWidth 1, msoTrue .Copy End With Set CopyPicture = picture End Function