#030
Vložit
- čas přidán 28. 02. 2024
- OutLookメールを自動作成して大量のリストを自動送信したり、Excelの書式を有効にしたりする方法を詳しく説明しています。
■再生リスト
• Excelパワークエリ
• Excelマクロ(VBA)
• Excel関数
• Excelピボットテーブル
▼動画で説明しているサンプルコード、コピペ活用ください。
Sub マクロ10_1()
' OutLookのメールを自動作成する
' Outlookオブジェクトの変数宣言
Dim myoutlook As Outlook.Application
Set myoutlook = New Outlook.Application
' メール送信用のオブジェクト作成
Dim mymail As Outlook.MailItem
Set mymail = myoutlook.CreateItem(olMailItem)
' メール送信内容の作成
With mymail
.To = Range("C3").Value 'TO宛先
.CC = Range("C4").Value 'CC宛先
.BCC = Range("C5").Value 'BCC宛先
.Subject = Range("C6").Value '件名
.Body = Range("C7").Value 'メール本文
.BodyFormat = olFormatHTML '形式の設定(テキスト:Plain、HTML:HTML)
.Display 'メールを表示
End With
End Sub
-----------------------------
Sub マクロ10_2()
' 本文の書式をExcelからそのまま利用しOutLookの署名を有効にする
' Outlookオブジェクトの変数宣言
Dim myoutlook As Outlook.Application
Set myoutlook = New Outlook.Application
' メール送信用のオブジェクト作成
Dim mymail As Outlook.MailItem
Set mymail = myoutlook.CreateItem(olMailItem)
' 添付ファイルの最終行取得
Dim maxRow As Long
maxRow = Cells(Rows.Count, 3).End(xlUp).Row
' 添付ファイル行数処理を実施
Dim i As Long
' メール送信内容の作成
With mymail
.To = Range("C3").Value 'TO宛先
.CC = Range("C4").Value 'CC宛先
.BCC = Range("C5").Value 'BCC宛先
.Subject = Range("C6").Value '件名
.BodyFormat = olFormatHTML '形式の設定(テキスト:Plain、HTML:HTML)
'Excelの本文を書式のままコピー
Range("C7").Copy '本文をコピー
Set xlform = .GetInspector.WordEditor.Range(0, 0) 'メールアイテムをWordEditor経由で編集
xlform.PasteExcelTable False, False, False '予定表本文へExcelの書式付で貼り付け
'ファイルを添付
For i = 8 To maxRow '8行目から最終行までのファイルを対象
If Range("C8").Value <> "" Then 'C8が空白以外の場合
.Attachments.Add Cells(i, "C").Value + Cells(i, "D").Value 'ファイルを添付
End If
Next i
.Display 'メールを表示
End With
Application.CutCopyMode = False 'コピーモード終了
End Sub
-----------------------------
Sub マクロ10_3()
' 複数のメールを一括送信したい
On Error GoTo error 'エラー発生時errorまで飛ぶ
' 添付ファイルの最終行取得
Dim maxRow As Long
maxRow = Cells(Rows.Count, "G").End(xlUp).Row
' 添付ファイル行数処理を実施
Dim i As Long
For i = 3 To maxRow '3行目から最終行までのファイルを対象
' Outlookオブジェクトの変数宣言
Dim myoutlook As Outlook.Application
Set myoutlook = New Outlook.Application
' メール送信用のオブジェクト作成
Dim mymail As Outlook.MailItem
Set mymail = myoutlook.CreateItem(olMailItem)
' 以降P列に”送信”と表示されているものだけ処理を進める
If Cells(i, "P") <> "" Then
' メール送信内容の作成
With mymail
.To = Cells(i, "G").Value 'TO宛先
.CC = Cells(i, "H").Value 'CC宛先
.BCC = Cells(i, "I").Value 'BCC宛先
.Subject = Cells(i, "J").Value '件名
.BodyFormat = olFormatHTML '形式の設定(テキスト:Plain、HTML:HTML)
' Excelの本文を書式のままコピー
Cells(i, "K").Copy '本文をコピー
Set xlform = .GetInspector.WordEditor.Range(0, 0) 'メールアイテムをWordEditor経由で編集
xlform.PasteExcelTable False, False, False '予定表本文へExcelの書式付で貼り付け
'ファイルを添付
If Cells(i, "L").Value <> "" Then 'L列が空白以外の場合
.Attachments.Add Cells(i, "L").Value + Cells(i, "M").Value 'ファイル①を添付
End If
If Cells(i, "N").Value <> "" Then 'N列が空白以外の場合
.Attachments.Add Cells(i, "N").Value + Cells(i, "O").Value 'ファイル②を添付
End If
End With
mymail.Display 'メールを表示
' mymail.Send 'メールを送信 ←有効にしたい場合は(’)を外してコード化
End If
Next i
Application.CutCopyMode = False 'コピーモード終了
Exit Sub 'エラーが無い場合ここまで処理を進めて抜ける
error:
Application.StatusBar = False
MsgBox "エラーが発生しました エラー番号=" & Err.Number & vbCrLf & _
"【原因が分からない場合は、管理者に連絡してください】" & vbCrLf & _
"エラーの内容は「" & Err.Description & "」です。", vbCritical
Application.CutCopyMode = False 'コピーモード終了
End Sub
10-2リストからプルダウン参照はvlookupですか?
ご視聴ありがとうございます!
VLOOKUPやXLOOKUPで大丈夫です。
動画は、VBAでXLOOKUPを使用してますのでセル事態に関数は入力されてません。
#031の動画のやり方でプルダウンでC2セル変更時に起動させてます。
とても分かりやすくて助かります。
宛先が複数人の場合はエクセルのフォーマット内でセル結合したり、セル内改行して作成していましたが、メール送信画面になると、アドレスが横一列にならずにエクセルフォーマットで作成したように縦一列に並んで表示されます。
これはこのまま送信してもちゃんと複数人に届くのでしょうか。
また、複数の範囲に分けて送信しよう(宛先アドレスにA1とA2を指定)とも思いましたが、.TO =RANGE("A1:A2").VALUE にしてもエラーが出てしまいました。
2つについて解決策等あれば教えていただきたいです。
ご視聴いただきありがとうございます!
ご質問にご回答いたします。
①送信されないと思います
セル内のアドレスがハイパーリンクになっていれば同一セル内改行で横一列になります。また、ハイパーリンクではないテキスト状態でも、メールアドレスの間にセミコロン(;)を入れておけば大丈夫です。
②セルを繋げたい場合は以下の例を参考としてください。
To = Range("A1") & ";" & Range("A2").Value
@@user-ps6es4yd6c
ありがとうございます!
教えていただいた方法を試したところうまくできました!
@@user-ps6es4yd6c
もう一点質問があるのですが、よろしいでしょうか。。
動画で紹介のあったように
本文をエクセル内に書き込み指定して、送信しようと考えています。
そこで、本文の日付などの変動する部分を(日付)と入力し、outlookで送信する際にリプレイスで置き換えたいと考えています。
しかし、Replace関数を使っているのにoutlookでは置換されていないのですが、なぜだかお分かりでしょうか?
以下を動画のコードにプラスしています。
Body = replace(Body,”「日付」”,range(“A1”).value)
例えば本文がセルA7に入力されていて、日付をA1の内容に置き換えたい場合は以下のようになります。
.Body = Replace(Range("A7"), "「日付」", Range("A1"))
また、当チャンネルのExcel関数に関する#110を見ていただくと、VBAで書き換える場合だけでなく、ゼル内の日付を制御する方法も載せておりますので参考にしてください。
@@user-ps6es4yd6c
ありがとうございます。
試したところ置換できはしたのですが、1つのときのみできている状況です。
セル内の本文に置換したい言葉が3つあり、それをいただいた式で試しても最後の3つ目のみが置換され、1つ目と2つ目のものは置換前のままでメールが作成されます。
どうすればいいのでしょうか?