Outlookのメールを日々利用されている方は、Excelで宛先や本文などまとめた情報からメールを作成・送信したいときはないでしょうか。
例えば、日報、週報、各書届などがワンクリックで何件もメールが作成され、送信ができるとなるととても楽になりますよね。
けど、そんな中で悩むことは、
・毎回メールを新規作成するのは面倒なので自動化したいけどやり方がわからない。
・日報、週報のメールをテンプレート化して、報告内容を入力するだけにしたいがやり方がわからない。
・宛先を手入力すると間違えてしまう可能性があるので固定値として定義しておきたいが、どうすればよいかわからない。
ですよね。
今回はそんなお悩みを解決する
・メールの差出人を変更、下書き保存、MSG形式で指定フォルダへ保存する方法
についてまとめます!
もくじ
ExcelからOutlookのメールを作成・送信する機能ついて
今回のVBAはExcelに記載した宛先、本文情報とメールテンプレートをもとに、Outlook側のメールを作成し、送信するといった内容となります。
サンプルデータは企業でよく使う勤怠の諸届(半休、全休、休日出勤など)としています。
それを以下のようにExcelのデータシートへ記載していきます。
続いて、メールテンプレートとなるシートを追加し、以下のようにタグ付きで入力します。
入力が完了したら、メールを作成したい行のA列に「表示」、メールテンプレート名を入力した上、VBAを実行すると、
メールテンプレートに沿った形でメールが作成され、タグの部分は先ほどのデータシートの値に置換されます。
また、A列に「送信」とすることで、表示をせずに送信することができます。
複数送信したい場合は、その分行を増やせばよいですし、
諸届以外にも日報など別のメール形式で出力したいときは、メールテンプレートを追加し、データシートに追加すればいろいろな種類のメールを同時に作成、送信することが可能です。
ExcelからOutlookのメールを作成・送信する機能の処理の流れについて
今回の機能の処理は以下の通りExcelからOutlookを起動し、Outlookのメール作成、送信が行われる流れとなります。
②Excelブック ← メールを作成したよ ← Outlook
③Excelブック(VBA) → メールを送信してね → Outlook
④Excelブック ← メールを送信したよ ← Outlook
では、早速実装をして動かしてみましょう!
VBAを実装する
続いてVBAを実装します。
VBAは以下の通りとなります。
Sub メール作成および送信()
Dim objOutlookApp As Object
Dim objMail As Object
Dim Rng As Range
Dim intintNum As Integer
Dim strBody As String
Dim strTag1 As String
Dim strTag2 As String
Dim strTag3 As String
Dim strTag4 As String
Dim strTag5 As String
Dim strBr As String
Dim strSubject As String
Dim strSTname_Template As String
strBr = vbLf '改行コード
'「メール宛先・本文」シートのA列最終行まで処理を繰り返します。
For intNum = 2 To Worksheets(1).Cells(1048576, 1).End(xlUp).Row + 1
'「メール宛先・本文」シートのA列載せるに値があればメール作成・送信処理を継続します。
If Worksheets(1).Cells(intNum, 1) <> "" Then
'メールテンプレートを設定します。
strSTname_Template = Worksheets(1).Range("B" & intNum).Value
'メールテンプレートの指定が無い場合は警告表示および処理を中断します。
If strSTname_Template = "" Then
MsgBox "B" & intNum & "にタイトル・本文テンプレートシートを指定してください。"
Exit Sub
End If
'Outlook.Applicationを呼び出し、セットします。
Set objOutlookApp = CreateObject("Outlook.Application")
Set objMail = objOutlookApp.CreateItem(olMailItem)
'メール宛先・本文シート記載の値を変数に入れます。
strTag1 = Worksheets(1).Range("G" & intNum).Text
strTag2 = Worksheets(1).Range("H" & intNum).Text
strTag3 = Worksheets(1).Range("I" & intNum).Text
strTag4 = Worksheets(1).Range("J" & intNum).Text
strTag5 = Worksheets(1).Range("K" & intNum).Text
'テンプレートのメール本文の箇所を読み込み、変数に入れます。
For Each Rng In Worksheets(strSTname_Template).Range(Worksheets(strSTname_Template).Range("A5").Value)
strBody = strBody & Rng.Value & vbLf
Next Rng
'メール本文中のタグを指定データへ置換します。
strBody = Replace(strBody, "<Tag1>", strTag1)
strBody = Replace(strBody, "<Tag2>", strTag2)
strBody = Replace(strBody, "<Tag3>", strTag3)
strBody = Replace(strBody, "<Tag4>", strTag4)
strBody = Replace(strBody, "<Tag5>", strTag5)
With objMail
.BodyFormat = 3 ' 「3」の場合リッチテキスト型となります。「1」はテキスト型、「2」は HTML型となります。
.To = Worksheets(1).Range("E" & intNum).Value
.CC = Worksheets(1).Range("F" & intNum).Value
'本文をBodyプロパティにセットします。
.Body = Worksheets(1).Range("C" & intNum).Value & strBr & Worksheets(1).Range("D" & intNum).Value & strBr & strBr & strBody
'テンプレートからタイトルを読み込みます。
strSubject = Worksheets(strSTname_Template).Range("A2").Value
'タグ部分を置換します。
strSubject = Replace(strSubject, "<Tag1>", strTag1)
strSubject = Replace(strSubject, "<Tag2>", strTag2)
strSubject = Replace(strSubject, "<Tag3>", strTag3)
strSubject = Replace(strSubject, "<Tag4>", strTag4)
strSubject = Replace(strSubject, "<Tag5>", strTag5)
.subject = strSubject
Select Case Worksheets(1).Cells(intNum, 1)
Case "表示"
'メールを表示します。
.Display
Case "送信"
.Display
.Send
Case Else
MsgBox "値が異なります。「表示」か「送信」を入力してください。"
End Select
End With
'メール本文をクリアします。
strBody = ""
End If
Next intNum
MsgBox "メール作成・送信が完了しました。"
Set objOutlookApp = Nothing
Set objMail = Nothing
End Sub
設定が必要な箇所は特にないですが、メールフォーマットは標準はリッチテキスト形式ですので、
利用しているフォーマットと異なれば適宜変更するようお願いします。
「3」の場合リッチテキスト型となります。「1」はテキスト型、「2」は HTML型となります。
.BodyFormat = 3
サンプルデータを用意する
上記の通りサンプルデータは企業でよく使う勤怠の諸届(半休、全休、休日出勤など)としていますので、
まずは情報を入力するデータシートおよび諸届メールのテンプレートシートを用意しましょう。
①情報を入力するシートを作成し、シート名を「メール宛先・本文」へ変更します。
※このシートはブックの1番左の位置へ配置するようにお願いします。
②1行目に項目名を入力します。
Mail操作 | タイトル・本文テンプレート | 部署名 | 氏名 | To | Cc | Tag1 | Tag2 | Tag3 | Tag4 | Tag5 |
③2行目のC2~J2まで以下のように入力します。
各項目の値は業務内容に応じて変更していただいて構いません。
④メールテンプレートとなるシートを追加し、シート名を「諸届テンプレ」へ変更します。
⑤以下をコピーし、A1セルからペーストしてください。
■タイトル
【諸届】タカヒロ:<Tag1>:<Tag2>■本文記載範囲
A8:A16■本文
以下の通り申請致します。
氏名:タカヒロ
年月日:<Tag1>
区分:<Tag2>
時間:<Tag3>
理由:<Tag4>
——–ここまで——-
申し訳ありません。
訂正をいたしましたので、再度参照頂ければと思います。
⑥「メール宛先・本文」シートへ戻り、A2に「表示」、B2に「諸届テンプレ」と入力します。
A列に「表示」といれるとその行の値を参照し、メールが作成・表示されることを意味します。
B列はメール本文のテンプレートを指定する列となります。
シートを追加することで複数の本文テンプレートを設定することが可能です。
これでデータの準備は完了です!
VBAを実行する
メールを作成・表示する
①「開発」タブの「マクロ」をクリックし「メール作成および送信」を選択し、「実行」をクリックします。
②Outlookからメールが作成されたら完成です!
メールを送信する
①「メール宛先・本文」シートのA列を「送信」に変更します。
サンプルでは行を増やし2つの書届メールを作成、送信します。
②「開発」タブの「マクロ」をクリックし「メール作成および送信」を選択し、「実行」をクリックします。
④Outlookの送信トレイの蓄積、送信済みトレイに送信履歴があれば完成です!
今回のVBAについて説明
「メール宛先・本文」シートのA列最終行を取得し、件数分処理を繰り返します。
For intNum = 2 To Worksheets(1).Cells(1048576, 1).End(xlUp).Row + 1
「メール宛先・本文」シートのA列載せるに値があればメール作成・送信処理を継続します。
If Worksheets(1).Cells(intNum, 1) <> "" Then
メールテンプレートを設定します。
strSTname_Template = Worksheets(1).Range("B" & intNum).Value
メールテンプレートの指定が無い、もしくは指定テンプレートが存在しない場合は警告表示および処理を中断します。
If strSTname_Template = "" Then
MsgBox "B" & intNum & "にタイトル・本文テンプレートシートを指定してください。"
Exit Sub
End If
Outlook.Applicationを呼び出し、セットします。
Set objOutlookApp = CreateObject("Outlook.Application")
Set objMail = objOutlookApp.CreateItem(olMailItem)
メール宛先・本文シート記載の値を変数に入れます。
strTag1 = Worksheets(1).Range("G" & intNum).Text
strTag2 = Worksheets(1).Range("H" & intNum).Text
strTag3 = Worksheets(1).Range("I" & intNum).Text
strTag4 = Worksheets(1).Range("J" & intNum).Text
strTag5 = Worksheets(1).Range("K" & intNum).Text
テンプレートのメール本文の箇所を読み込み、変数に入れます。
For Each Rng In Worksheets(strSTname_Template).Range(Worksheets(strSTname_Template).Range("A5").Value)
strBody = strBody & Rng.Value & vbLf
Next Rng
メール本文中のタグを指定データへ置換します。
strBody = Replace(strBody, “”, strTag2)
strBody = Replace(strBody, “”, strTag3)
strBody = Replace(strBody, “”, strTag4)
strBody = Replace(strBody, “”, strTag5).BodyFormat = 3 ‘ 「3」の場合リッチテキスト型となります。「1」はテキスト型、「2」は HTML型となります。
.To = Worksheets(1).Range(“E” & intNum).Value
.CC = Worksheets(1).Range(“F” & intNum).Value
本文をBodyプロパティにセットします。
.Body = Worksheets(1).Range("C" & intNum).Value & strBr & Worksheets(1).Range("D" & intNum).Value & strBr & strBr & strBody
テンプレートからタイトルを読み込みます。
strSubject = Worksheets(strSTname_Template).Range("A2").Value
タグ部分を Replaceメソッドで指定した値へ置換します。
<code>strSubject = Replace(strSubject, "", strTag1)
strSubject = Replace(strSubject, "", strTag2)
strSubject = Replace(strSubject, "", strTag3)
strSubject = Replace(strSubject, "", strTag4)
strSubject = Replace(strSubject, "", strTag5)
.subject = strSubjectSelect Case で実行パターン別に処理をおこないます。
Select Case Worksheets(1).Cells(intNum, 1)
Case "表示"
'メールを表示します。
.Display
Case "送信"
.Display
.Send
Case Else
MsgBox "値が異なります。「表示」か「送信」を入力してください。"
End Select
最後にメール本文をクリアします。
strBody = ""
<追加>作成したメールの差出人を変更する方法
作成したメールの差出人を変更する方法について説明をします。
サンプルは、デフォルトの差出人が「takahiro1」である場合、2つ目のアドレス「takahiro9」に変更する内容となります。
ソースコードの変更箇所はCase “表示”の中となります。以下のように処理を追加していきます。
■変更前
Case "表示"
.Display
■変更後
Case "表示"
‘差出人を指定します。
Set .SendUsingAccount = objOutlookApp.Session.Accounts.Item(“takahiro9@****.**”)
.Display
実行してみましょう。
はい、差出人が2つ目のアドレス「takahiro9」に変更されていますね。
SendUsingAccountプロパティを使用して、MailItem「objMail」の差出人アカウントを指定しています。
差出人アカウントはOutlookアプリケーション「objOutlookApp」のSession.Accounts.Itemにありますので、SMTPアドレスで指定しています。またSMTPアドレス以外にも順番をあらわす数値でも指定が可能です。
objOutlookApp.Session.Accounts.Item(2)
<追加>作成したメールを下書きへ保存する方法
作成したメールを下書きへ保存する方法について説明をします。
同じくCase “表示”のコードを以下のように変更をします。
■変更前
Case "表示"
.Display
■変更後
Case "表示"
‘下書きへ保存します。
.Save
.Display
VBAを実行してみます。
はい、下書きフォルダへ保存されていますね。
<追加>作成したメールをMSG形式で指定フォルダへ保存する方法
作成したメールをMSG形式で指定フォルダへ保存する方法について説明をします。
保存先のフォルダは「F:\MSG」、MSGファイルのファイル名はメールの件名となるようにしています。
同じくCase “表示”のコードを以下のように変更をします。
■変更前
Case "表示"
.Display
■変更後
Case "表示"
.Display
‘MSGファイルとして保存します。
.SaveAs “F:\test\” & .subject & “.msg”, olMSG
VBAを実行してみます。
はい、指定フォルダへ保存されていますね。
SaveAsメソッドはOutlookアイテムを、指定したパスに、指定したファイルの種類の形式で保存することができます。
書式は以下の通りです。
SaveAs (Path, Type)
TypeはMSGタイプの他にolHTML、olRTF、olTemplate、olDoc、olTXT、olVCal、olVCard、olICal、olMSGUnicode などが指定できます。
<追加>作成したメールにファイルを添付する方法
作成したメールにファイルを添付する方法について説明をします。
添付ファイルは「F:\test」にある2つのExcelファイルです。
表のQ列目に添付ファイルのパスを記述するスペースを設け、添付したいメールに添付ファイルのパスを指定していきます。
コードを以下のように変更をします。
■変更前
.subject = strSubject
■変更後
.subject = strSubject
‘ファイルを添付します。
If IsEmpty(Worksheets(1).Range(“Q” & intNum).Value) = False Then
.Attachments.Add Worksheets(1).Range(“Q” & intNum).Value
End If
VBAを実行してみます。
はい、指定フォルダへ保存されていますね。
<追加>メール本文にハイパーリンクをつける方法
メール本文にハイパーリンクをつける方法について説明をします。
基本的にhttpから始まる文字列や@マーク入りの文字列はリッチテキスト形式であれば貼り付けた段階でハイパーリンクに変換されます。
ただし、「ホームページはこちら」などアドレスと表示内容を別にしたい場合はできません。
そこで、少し技術難易度は上がりますが、HTMLタグを使うことにより対応ができますので、追加説明をしたいと思います。
まず、エクセル側のテンプレートの改行コードをHTMLタグに変更します。
サンプルテンプレートの「諸届テンプレ」を以下のように変更します。
■タイトル
【諸届】タカヒロ:<Tag1>:<Tag2>
■本文記載範囲A8:A16
<code>
■本文以下の通り申請致します。<br><br>
氏名:タカヒロ<br>
年月日:<Tag1><br>
区分:<Tag2><br>
時間:<Tag3><br>
理由:<Tag4><br>
Tag4にHTMLタグ付きの文字列を入れます。
夏季休暇をいただきたくお願いします。<br>
休暇中の<b>連絡先は以下まで</b>お願いします。<br>
<a href="mailto:○○○@○○○.co.jp">メールはこちら</a>
こちらは太字を示します。
<b>連絡先は以下まで</b>
hrefでメールリンク先を指定します。
<a href="mailto:○○○@○○○.co.jp">メールはこちら</a>
コードを以下に変更をします。
変更した箇所は以下の3点です。
改行コードを<br>に変更。
strBr = "<br>"
本文のフォーマットをHTML型に変更。
.BodyFormat = 2
本文をhtmlBodyプロパティに変更。
.htmlBody =
全コード
Sub HTMLメール作成および送信()
Dim objOutlookApp As Object
Dim objMail As Object
Dim Rng As Range
Dim intintNum As Integer
Dim strBody As String
Dim strTag1 As String
Dim strTag2 As String
Dim strTag3 As String
Dim strTag4 As String
Dim strTag5 As String
Dim strBr As String
Dim strSubject As String
Dim strSTname_Template As String
strBr = "<br>" '改行コード
'「メール宛先・本文」シートのA列最終行まで処理を繰り返します。
For intNum = 2 To Worksheets(1).Cells(1048576, 1).End(xlUp).Row + 1
'「メール宛先・本文」シートのA列載せるに値があればメール作成・送信処理を継続します。
If Worksheets(1).Cells(intNum, 1) <> "" Then
'メールテンプレートを設定します。
strSTname_Template = Worksheets(1).Range("B" & intNum).Value
'メールテンプレートの指定が無い場合は警告表示および処理を中断します。
If strSTname_Template = "" Then
MsgBox "B" & intNum & "にタイトル・本文テンプレートシートを指定してください。"
Exit Sub
End If
'Outlook.Applicationを呼び出し、セットします。
Set objOutlookApp = CreateObject("Outlook.Application")
Set objMail = objOutlookApp.CreateItem(olMailItem)
'メール宛先・本文シート記載の値を変数に入れます。
strTag1 = Worksheets(1).Range("G" & intNum).Text
strTag2 = Worksheets(1).Range("H" & intNum).Text
strTag3 = Worksheets(1).Range("I" & intNum).Text
strTag4 = Worksheets(1).Range("J" & intNum).Text
strTag5 = Worksheets(1).Range("K" & intNum).Text
'テンプレートのメール本文の箇所を読み込み、変数に入れます。
For Each Rng In Worksheets(strSTname_Template).Range(Worksheets(strSTname_Template).Range("A5").Value)
strBody = strBody & Rng.Value & vbLf
Next Rng
'メール本文中のタグを指定データへ置換します。
strBody = Replace(strBody, "<Tag1>", strTag1)
strBody = Replace(strBody, "<Tag2>", strTag2)
strBody = Replace(strBody, "<Tag3>", strTag3)
strBody = Replace(strBody, "<Tag4>", strTag4)
strBody = Replace(strBody, "<Tag5>", strTag5)
With objMail
.BodyFormat = 2 ' 「3」の場合リッチテキスト型となります。「1」はテキスト型、「2」は HTML型となります。
.To = Worksheets(1).Range("E" & intNum).Value
.CC = Worksheets(1).Range("F" & intNum).Value
'本文をhtmlBodyプロパティにセットします。
.htmlBody = Worksheets(1).Range("C" & intNum).Value & strBr & Worksheets(1).Range("D" & intNum).Value & strBr & strBr & strBody
'テンプレートからタイトルを読み込みます。
strSubject = Worksheets(strSTname_Template).Range("A2").Value
'タグ部分を置換します。
strSubject = Replace(strSubject, "<Tag1>", strTag1)
strSubject = Replace(strSubject, "<Tag2>", strTag2)
strSubject = Replace(strSubject, "<Tag3>", strTag3)
strSubject = Replace(strSubject, "<Tag4>", strTag4)
strSubject = Replace(strSubject, "<Tag5>", strTag5)
.Subject = strSubject
Select Case Worksheets(1).Cells(intNum, 1)
Case "表示"
'メールを表示します。
.Display
Case "送信"
.Display
.Send
Case Else
MsgBox "値が異なります。「表示」か「送信」を入力してください。"
End Select
End With
'メール本文をクリアします。
strBody = ""
End If
Next intNum
MsgBox "メール作成・送信が完了しました。"
Set objOutlookApp = Nothing
Set objMail = Nothing
End Sub
設定が完了したらVBAを実行してみましょう。
はい、リンクが有効になり、太字にもなっていますね。
リンクをクリックするとメールが開きます。
hrefの横にある「mailto:」を外し、httpから始まるアドレスを入力してください。
<追加>メール本文に特定の書式やフォントを設定する方法
メール本文に特定の書式やフォントを設定する方法について説明をします。
まず、使用するコードは上記ハイパーリンクをつける仕様のコードになりますので、
「HTMLメール作成および送信」のコードを実装するようお願いします。
理由は書式設定はHTMLコードで記述するためです。
次に書式を設定したデータを用意します。
今回設定する書式は以下の通りです。
・文字色
・太字
・アンダーライン
・ハイパーリンク
フォントは
游ゴシックLight
を指定します。
まずはタグに設定する範囲で書式及びフォントを設定してみましょう。
<span style="font-family: '游ゴシック Light';">游ゴシック Lightフォントの指定
<span style="color: red;">文字赤</span>
<b>文字太字</b>
<u>文字斜体</u>
<a href="https://extan.jp/">ハイパーリンクhttps://extan.jp/</a>
</span>
全体の設定は以下の通りです。
テンプレートシートの内容もHTMLタグに対応させるため、改行コード<br>を追加します。
以下の通り申請致します。<br>
氏名:タカヒロ<br>
<br>
商品名:<Tag2><br>
発注日:<Tag3><br>
納品日:<Tag4><br>
運送会社:<Tag5><br>
<br>
以上/タカヒロ
設定が終わったら、ハイパーリンクで紹介したコード
「HTMLメール作成および送信」でVBAを実行します。
はい、メールが作成され、
指定タグ内の書式およびフォントが設定されたことがか確認できました。
次は本文全体にフォント指定をしてみたいと思います。
先ほどのテンプレート本文を以下のように指定したフォントタグで囲みます。
<span style='font-family:"游ゴシック Light"'>
以下の通り申請致します。<br>
氏名:タカヒロ<br>
<br>
商品名:<Tag2><br>
発注日:<Tag3><br>
納品日:<Tag4><br>
運送会社:<Tag5><br>
<br>
以上/タカヒロ
</span>
VBAを実行してみましょう。
はい、本文全体のフォントが指定されましたね!
これは本文外で指定しているためで、お手数ですが、
本文データ入力欄ごとにHTMLタグでフォントを指定するようお願いします。
さいごに
いかがでしょうか。
今回は、
・メールの差出人を変更、下書き保存、MSG形式で指定フォルダへ保存する方法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
下記のようにTag1には、G列に記載されている情報が反映されますが、G2セル、G3セルにも異なる情報が入力されているセルも、1メールに反映させたい場合はどのようにコードを組んだら良いでしょうか。
--------------
‘メール宛先・本文シート記載の値を変数に入れます。 strTag1 = Worksheets(1).Range(“G” & intNum).Text strTag2 = Worksheets(1).Range(“H” & intNum).Text
参考にさせていただきました。ありがとうございます。
1つ教えて下さい。
にある、差出人を変更するコードをメールアドレス部分のみ書き換え自分用に転用したところ、実行エラー’5′ プロシージャの呼び出し、または引数が不正です。となりました。
同様に、アドレス部分を「順番を示す数値」に置き換えた場合では、実行時エラー’440’オートメーションエラーです。と表示されます。
現在書き換えようとしている差出人アドレスは他者との共有アドレスで、受信ボックスの確認やメールの送受信はできる状態ではあるものの、Outlook上でログインはしておりません。この状況が関係している可能性はあるでしょうか。
そうでなく、考えられる原因が他にあれば教えていただきたいです。
よろしくお願いします。
いつもご利用ありがとうございます。
まず、発生するエラーについてですが、
エラー ‘5’ は通常、プロシージャの呼び出しや引数が無効な場合に発生します。
例えば、メールアドレスの形式が正しくない場合や、存在しないメールボックスを指定した場合です。
また、エラー ‘440’ はオートメーションエラーで、外部のアプリケーションやオブジェクトにアクセスする際に問題が発生した場合に発生します。
おそらく、共有アドレスのメールボックスに対する適切なアクセス権がつけられていない可能性があります。
共有アドレスであっても、そのメールボックスに対して送信者としてメールを送る権限が必要となりますので、
ご自身のアドレスが共有アドレスのメールボックスに対して、代理による送信権限が与えられているか確認をお願いいたします。
ご参考
https://learn.microsoft.com/ja-jp/microsoft-365/admin/add-users/give-mailbox-permissions-to-another-user?view=o365-worldwide
教えてください
アプリのOutlookではなく、WEB版のOutlook(m365)から、メールを出すことはできますか?
お忙しいところ申し訳ありませんよろしくお願いします
いつもご利用ありがとうございます。
Web版のOutlookからメールを送信する方法につきまして、
Outlookと連動させメールを送信するということであればMicrosoft Power Automate(Web版)を使うことがよいかと思われます。
RPAですのでノーコードでつくれ、またメールに関するテンプレートが用意されていますので、
初心者の方でも容易に作ることができます。
入力画面から作りこむ場合はPower Appsの選択が良いかと思われます。
詳細は以下にまとめていますので、ご参考ください。
https://extan.jp/?p=11859
連投ですみません。B2テンプレートは貼り付け直しで解決しました。
それとは別件で教えてください。
Excelのメール本文テンプレートのシートで ハイパーリンクのセルとかメールアドレスをOUTLOOKに貼り付けてハイパーリンクがそのまま使えるようにしたいのですが
リンクが解除されてしまいます。どうすれば有効になるでしょうか
お忙しいところ申し訳ありません。
Excelテンプレートのセルにあるハイパーリンクをリンクを維持した状態で貼り付ける方法ですが、
確実な方法はHTMLタグ(<a href=>)をつけて、HTMLモードで本文に張り付ける方法です。
詳細は本記事の以下の箇所にありますのでご参考くださいませ。
https://extan.jp/?p=3408#%EF%BC%9C%E8%BF%BD%E5%8A%A0%EF%BC%9E%E3%83%A1%E3%83%BC%E3%83%AB%E6%9C%AC%E6%96%87%E3%81%AB%E3%83%8F%E3%82%A4%E3%83%91%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%AF%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95
また少し特殊ですが、Excelセル内のリンクや書式設定をまとめてメール本文へコピペする方法もあります。
少々アレンジただく必要がありますがご検討いただければと存じます。、
https://extan.jp/?p=6656
B2セルにテンプレート名を入力しているのに 実行を押すとB2にタイトル・テンプレート名を指定してください。と表示されます。
回避する方法を教えていただけたらと思います。
ご連絡ありがとうございます。
B2セルにテンプレート名を入力しているのに 実行を押すとB2にタイトル・テンプレート名を指定してください。と表示される件ですが、
B2セルのテンプレート名とテンプレートが実装されているエクセルのシート名が完全に一致しているかご確認いただけますでしょうか。
※テンプレートがあるシート名をB2セルへコピペしていただくと確実かと思います。
回答ありがとうございます!
大体できあがったのですが、頂いたリンクではoutlook vbaだったのでエクセルvbaで以下の通り表を添付することに成功しました。
質問は3点です。
1. エクセルvbaでメールを作成する際、署名が最後に入ってしまいます。署名は別で用意しているのでいつものOUTLOOKの署名はなくしたいですがどうしたらいいですか?
2. 作成したメールは別の方が確認するため、指定のシェアドライブのフォルダに保存したいですがsaveasだとエラーでできないです。
3. 上記メールをフォルダに保存後Displayしたメールを閉じたいです。もしくはDisplayしなくても表はメールにコピペ可能ですか?
以上よろしくお願いいたします。
Dim ws, wsP As Worksheet
Dim Data, Data2, PO As Worksheet
Dim q, J As Long
Dim RowCnt, LastRow, List_Cnt As Long
Dim ShtName As Long
Set ws = ThisWorkbook.Sheets(“List”)
Set wsP = ThisWorkbook.Sheets(“Piv”)
Set Data = Sheets(“Full_PO”)
Set Data2 = Sheets(“Partial_PO”)
Set PO = Sheets(“PO”)
—-省略—-
PO.Select
Range(Range(“A1”), ActiveCell.SpecialCells(xlLastCell)).Copy
ws.Select
Set OutlookObj = CreateObject(“Outlook.Application”)
Set mailItemObj = OutlookObj.CreateItem(0)
Dim groupaddress, toaddress, ccaddress As String
Dim subject, mailBody, sign As String
Dim fpath As String
Dim Bssi, Cssi As String
Bssi = Cells(q, 7).Value
Cssi = Cells(q, 8).Value
fpath = Range(“C2”).Value
groupaddress = Range(“D2”).Value
toaddress = Cells(q, 5).Value
subject = Cells(q, 6).Value
mailBody = Range(“E2”).Value
sign = Range(“F2”).Value
sign = Replace(sign, “BarcSSI”, Bssi)
sign = Replace(sign, “CPSSI”, Cssi)
mailItemObj.BodyFormat = 2
mailItemObj.SentOnBehalfOfName = groupaddress
mailItemObj.To = toaddress
mailItemObj.CC = groupaddress
mailItemObj.BCC = “”
mailItemObj.subject = subject
mailItemObj.Display
With mailItemObj.GetInspector().WordEditor.Windows(1).Selection
.TypeText mailBody
.TypeText vbCrLf
.Paste
.TypeText vbCrLf
.TypeText sign
End With
mailItemObj.SaveAs fpath & subject & “.msg”, olmsg
Set OutlookObj = Nothing
Set mailItemObj = Nothing
PO.Cells.Delete Shift:=xlUp
表の貼り付けの件できたようでよかったです。
追加のご質問について回答いたします。
1. 署名は別で用意しているのでいつものOUTLOOKの署名はなくしたいですがどうしたらいいですか?
Outlook上で規定の署名を「なし」に設定いただければと思います。
2. 作成したメールは別の方が確認するため、指定のシェアドライブのフォルダに保存したいですがsaveasだとエラーでできないです。
saveメソッドについて対象はローカルとなっており、ネットワーク上のドライブやSharepointは対応していないことご了承願います。
3. 上記メールをフォルダに保存後Displayしたメールを閉じたいです。もしくはDisplayしなくても表はメールにコピペ可能ですか?
Displayしたメールを閉じるにはCloseメソッド(myItem.Close)でお願いします。
いつもありがとうございます!教えてください。
エクセルの顧客リストから顧客ごとにフィルターしてその表をメールの本文にコピペする場合コードどうなりますか?よろしくお願いいたします!
いつもご利用ありがとうございます。
エクセルの顧客リストから顧客ごとにフィルターしてその表をメールの本文にコピペする方法ですが、
まず、表をメール本文に張り付ける方法は以下にまとめていますので、ご参考いただければと思います。
https://extan.jp/?p=6692
次に顧客リストから顧客ごとにフィルターする機能につきましては、オートフィルターが一般的ですので、
以下の記事を参考に操作いただければと存じます。
https://extan.jp/?p=366
この様式で、宛先、氏名、本文すべてを書式設定”游ゴシック”で送信したいのですが可能ですか?
いつもご利用ありがとうございます。
メール本文に書式設定をする方法についてまとめましたので、
ご参考ください。
https://extan.jp/?p=3408#%EF%BC%9C%E8%BF%BD%E5%8A%A0%EF%BC%9E%E3%83%A1%E3%83%BC%E3%83%AB%E6%9C%AC%E6%96%87%E3%81%AB%E7%89%B9%E5%AE%9A%E3%81%AE%E6%9B%B8%E5%BC%8F%E3%82%84%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95
Excelのメール送信の添付ファイルに メールを添付ファイルとして添付することはできますか?
メールを選択して 選択しためーるを添付用ファイルとして変換して
フォルダを決めてそこに格納して添付することは可能でしょうか
いつもこちらのサイトを参考にさせていただいております。
アプリケーション版のOutlookではなく、web版のOutlookでメール作成する方法はございますでしょうか。
できましたらChrome起動→Outlookでメール作成送信が理想なのですが、
Edge起動→Outlookでメール作成送信でも問題ございません。
こちらの内容のような複数・多種類のメールを作成・送信したいです。
お忙しいところ恐縮ですが、ご教授いただけますと幸いです。
よろしくお願い申し上げます。
いつもご利用ありがとうございます。
web版のOutlookでメール作成する方法につきまして、
公開しているコードの対象範囲はアプリケーション版のみとなっておりますこと
ご了承のほどお願いいたします。
web版のOutlook作成に関しては、RPAのPowerAutomateから行うことがよいかと思われます。
またChrome起動からですと、OS領域のアプリケーション制御が必要になりますので、
PowerAutomate Desktop版にてChromeと連携した上で実行する形になるかと思われます。
なお、PowerAutomateについてはまだ当サイトでの取り扱いが少なく、操作方法など詳細な情報を提供することが難しい状況ですので、
大変恐縮ですが、Microsoft社のサイトなどからご確認いただきたくお願いいたします。
添付できました
ありがとうございました
いつも参考にさせていただいております
メール送信で成功していたのですが 急に
‘テンプレートのメール本文の箇所を読み込み、変数に入れます。
For Each Rng In Worksheets(strSTname_Template).Range(Worksheets(strSTname_Template).Range(“A5”).Value)
strBody = strBody & Rng.Value & vbLf
Next Rng
の部分で 実行時エラー 9 インデックスが有効範囲ではありません と
エラーが出るようになりました
原因と 解消方法を教えていただけたらと思います
よろしくお願いします
いつもご利用ありがとうございます。
エラーメッセージ “実行時エラー 9: インデックスが有効範囲ではありません” は、
配列やコレクションのインデックスが範囲外を指していますので、正しい範囲が設定されていない可能性があります。
対象シートの“A5”セルに”A8:A10″など範囲指定の文字列になっているかご確認いただきたくお願いいたします。
教えてください
メール作成シートに作成した表のY列に temp1という欄をもうけて
そこに添付ファイルを置いたフォルダとファイル名を記載しましたがメールに添付できません
zipファイルは添付できないのでしょうか
‘ファイルを添付します。
If IsEmpty(Worksheets(1).Range(“Y” & intNum).Value) = False Then
.Attachments.Add Worksheets(1).Range(“Y” & intNum).Value
End If
としましたがWorksheets(1)のままでいいでしょうか メール作成 とタグ名をいれるのでしょうか
よろしくお願いします
いつもご利用ありがとうございます。
メールにzipファイルを添付できない件につきまして、
まず、zipファイルの添付は可能となります。
次に、Worksheets(1)についてですが、1シート目のシートを参照する内容となりますので、
ファイル名が記載されたシートが1シート目以外に位置する場合は、1シート目に移していただけますでしょうか。
また、「.zip」の拡張子が抜けていると参照できませんので、ない場合は拡張子まで入力いただきたく願いいたします。