Excel チュートリアル – Excel からメールを送信する
通常、私たちはOutlookやGmailなどのメールクライアントを使用してメールを送信します。しかし、多くの人がデータをExcelワークブックに保存しており、そのデータの一部を他の人に送る必要がある場合があります。そのため、メールクライアントを操作する時間を節約するために、Excelワークブックから直接メールを送信したいという需要があります。このステップバイステップのチュートリアルでは、さまざまな状況下でExcelからメールを送信する方法を紹介します。
注: 以下の方法を適用する前に、コンピュータにOutlookメールクライアントを設定し、それをデフォルトのメールクライアントとして設定する必要があります。
目次: [ 非表示 ]
1. Excelからメールを送信する基本
このセクションでは、Excelからメールを送信する基本事項を紹介します。
1.1 Excelの組み込み関数を使用してExcelからメールを送信する
ExcelからTo、件名、Cc、本文フィールドのみを含むシンプルなメールを送信したい場合、Excelの組み込み機能が役立ちます。
下の表に示すように、Excel で指定されたフィールドに基づいて異なるメールを送信するには、指定されたフィールドのセル参照を使用して異なるハイパーリンク数式を作成することで対応できます。メールのハイパーリンクを作成後、そのハイパーリンクをクリックすることで自動的にメールを送信できます。
注: ToフィールドまたはCcフィールドに複数の受信者がいる場合は、セミコロンで区切ってください。
このセクションは、Hyperlink数式にメールアドレス、Ccの受信者、件名、本文テキストをそれぞれ追加する手順を示すために4つの部分に分かれています。以下のように操作してください。
「HYPERLINK」関数の構文と引数は次のとおりです。
構文
ハイパーリンク(link_location, [friendly_name])
引数
ここでは、メール受信者を追加するために数式の一部として "mailto:" を使用します。この例では、最初の受信者のメールアドレスはセル B2 にあるため、「mailto:」を追加し、それをセル B2 に参照させる必要があります。
“mailto:”&B2
1. ハイパーリンクを表示するセルを選択します。この場合、セル F2 を選択します。
2. 次に、次の数式を入力します。
=HYPERLINK("mailto:"&B2)
注: 「Enter」キーを押すと、下のスクリーンショットに示すようにハイパーリンクが作成されます。リンクをクリックすると、Outlookのメールが作成され、宛先のメールアドレスが自動的に「To(宛先)」フィールドに入力されます。
受信者のメールアドレスがハイパーリンク数式に追加されました。必要に応じて、次の手順に従って件名、Cc受信者、本文テキストを追加してください。
Hyperlink関数にCcの受信者を追加するには、次のように「?cc=」を数式の一部として追加してください。
セル F2 の数式は次のようになります:
=HYPERLINK("mailto:" & B2 & "?cc=" & C2)
ハイパーリンク関数に件名行を追加するには、次のように「&subject=」を数式の一部として追加してください。
セル F2 の数式は、次のようになっているはずです:
=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2)
1.1.1.4 ハイパーリンク数式に行区切りを含む本文を追加
最後のステップは、本文テキストをハイパーリンク数式に追加することです。例で見られるように、E2の2行のテキストは改行で区切られており、その改行をメール本文にも保持したいと考えています。この場合、Outlookは改行を認識してくれるのでしょうか? 確認してみましょう。
ハイパーリンク数式に本文を追加するには、次のように数式の一部として「&body=」を追加する必要があります。
セル F2 の数式は、次のように表示されます。
=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2 & "&body="& E2)
注: 「Enter」キーを押してリンクをクリックすると、新しいメールで本文の内容が同じ行に表示されていることが確認できます。
電子メールの本文を別々の行に表示するには、改行を挿入したいテキストの位置にキャリッジリターン文字コード「%0A」を追加して、セルの内容を変更する必要があります。 スクリーンショットをご覧ください:
1.1.1.5 ハイパーリンクに表示するテキストを指定します
上記の手順では、メールフィールドを使用して Link_location 引数を完了しました。このセクションでは、次の引数 [friendly_name] を完了します。
この場合、ハイパーリンクのセルに「Email to xx」というテキストを表示させたいです。ここで、xx は A2 にある受信者の名前です。したがって、F2 の数式は次のように変更する必要があります:
=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2 & "&body="& E2, "Email to "&A2)
「Enter」キーを押して結果を得ます。
この数式セルを選択し、「オートフィルハンドル」を下にドラッグして、他のメールハイパーリンクを作成します。スクリーンショットをご覧ください:
1.1.2 ハイパーリンク関数を使用してExcelからメールを送信する
上記のハイパーリンク数式を使う以外に、Excelの「ハイパーリンクの挿入」機能を使って手動でメールのハイパーリンクを作成することもできます。このセクションでは、その手順を説明します。
1. ハイパーリンクを挿入したいメールを右クリックし、右クリックメニューから「リンク」を選択します。
2. 表示された「ハイパーリンクの挿入」ダイアログボックスで、次の設定を行う必要があります。

ハイパーリンクをクリックすると、下のスクリーンショットに示すように、指定された宛先、件名、本文フィールドを使用してOutlookのメールが作成されます。
注記:
1.2 VBAスクリプトを使用してセル内の複数の受信者にメールを送信
上記の例では、セル内にセミコロンで区切られた複数のメールアドレスが表示されています。下のスクリーンショットに示すように、メールアドレスのリストがあり、それらすべてに1通のメールまたは個別のメールを送信したい場合、次のVBAコードが役立ちます。
1.2.1 VBAスクリプトを使用してセル内の複数の受信者にメールを送信する
1. 送信したいすべてのメールアドレスが含まれているワークシートで、「Alt」+「F11」キーを押して「Microsoft Visual Basic for Applications」ウィンドウを開きます。
2. 「Microsoft Visual Basic for Applications」ウィンドウで、「挿入」 > 「モジュール」をクリックし、次のコードを「モジュール (コード)」ウィンドウに貼り付けます。
VBAコード: メールアドレスのリストにメールを送信
Sub sendmultiple()
'updateby Extendoffice 20220802
Dim xOTApp As Object
Dim xMItem As Object
Dim xCell As Range
Dim xRg As Range
Dim xEmailAddr As String
Dim xTxt As String
On Error Resume Next
xTxt = ActiveWindow.RangeSelection.Address
Set xRg = Application.InputBox("Please select the addresses list:", "Kutools for Excel", xTxt, , , , , 8)
If xRg Is Nothing Then Exit Sub
Set xOTApp = CreateObject("Outlook.Application")
For Each xCell In xRg
If xCell.Value Like "*@*" Then
If xEmailAddr = "" Then
xEmailAddr = xCell.Value
Else
xEmailAddr = xEmailAddr & ";" & xCell.Value
End If
End If
Next
Set xMItem = xOTApp.CreateItem(0)
With xMItem
.To = xEmailAddr
.Subject = "Test"
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel"
.Display
End With
End Sub
3. 「F5」キーを押してコードを実行すると、「Kutools for Excel」ダイアログボックスが表示されます。メールアドレスのリストを選択して「OK」をクリックしてください。
注記:
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel"
コードを実行後、選択範囲内のすべてのメールアドレスがメッセージウィンドウの「To(宛先)」フィールドに表示されます。スクリーンショットをご覧ください:
1.2.2 VBAスクリプトを使用して、セルに記載された各受信者に個別にメールを送信する
上記のコードは、選択範囲内のすべてのメールアドレスをメッセージウィンドウの「To(宛先)」フィールドに追加します。もし、各メールアドレスに個別にメールを送信し、他の受信者のメールアドレスを見られないようにしたい場合は、次のVBAスクリプトをお試しください。
1. 送信したいすべてのメールアドレスが含まれているワークシートで、「Alt」+「F11」キーを押して「Microsoft Visual Basic for Applications ウィンドウ」を開きます。
2. 「Microsoft Visual Basic for Applications」ウィンドウで、「挿入」 > 「モジュール」をクリックし、次のコードをモジュール(コード)ウィンドウに貼り付けます。
VBAコード: セルにリストされた各メールアドレスに個別にメールを送信する
Sub SendEmailToAddressInCells()
'Updated by Extendoffice 20220802
Dim xRg As Range
Dim xRgEach As Range
Dim xRgVal As String
Dim xAddress As String
Dim xOutApp As Outlook.Application
Dim xMailOut As Outlook.MailItem
On Error Resume Next
xAddress = ActiveWindow.RangeSelection.Address
Set xRg = Application.InputBox("Please select the addresses list", "KuTools For Excel", xAddress, , , , , 8)
If xRg Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Set xOutApp = CreateObject("Outlook.Application")
Set xRg = xRg.SpecialCells(xlCellTypeConstants, xlTextValues)
For Each xRgEach In xRg
xRgVal = xRgEach.Value
If xRgVal Like "?*@?*.?*" Then
Set xMailOut = xOutApp.CreateItem(olMailItem)
With xMailOut
.To = xRgVal
.Subject = "Test"
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel"
.Display
'.Send
End With
End If
Next
Set xMailOut = Nothing
Set xOutApp = Nothing
Application.ScreenUpdating = True
End Sub
3. 次に、「ツール」>「参照設定」をクリックします。「参照設定 – VBAProject」ダイアログボックスで、「Microsoft Outlook 16.0 Object Library」のチェックボックスを探してチェックし、「OK」ボタンをクリックして変更を保存します。
4. 「F5」キーを押してコードを実行すると、「Kutools for Excel」ダイアログボックスが表示されます。メールアドレスのリストを選択して「OK」をクリックしてください。
注記:
.Subject = "Test"
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel"
この例では、選択範囲に6つのメールアドレスがあるため、スクリーンショットに示すように、[To]フィールドに個別のメールアドレスが自動的に記載された6つのOutlookメッセージウィンドウが作成されます。
5. 最後に、「送信」ボタンをクリックして、メールを1通ずつ送信します。
2. Excelから送信されるメールに添付ファイルやOutlookの署名を挿入する(VBAスクリプトを使用)
このセクションでは、Excelから送信されるメールに添付ファイルやOutlookのデフォルト署名を挿入する方法をご紹介します。
2.1 Excelから送信されるメールに添付ファイルを挿入する
ここでは、添付ファイルを挿入するさまざまなケースについて説明します。必要に応じて適切な方法を選択できます。このセクションでは、以下のいずれかのリンクをクリックして、対応する方法に移動し、学ぶことができます:
2.1.1 特定のファイルを添付ファイルとしてメールで送信する
次のVBAコードを適用して、Excelからフォルダ内の1つまたは複数のファイルを添付ファイルとしてメール送信できます。
1. 「Alt」キーと「F11」キーを押します。
2. 開いた「Microsoft Visual Basic for Applications」ウィンドウで、「挿入」 > 「モジュール」をクリックします。その後、次のVBAコードをモジュール(コード)ウィンドウに貼り付けます。
VBAコード: Excelからフォルダ内のファイルを添付ファイルとしてメールで送信
Sub EmailWithAttachments()
'Updated by Extendoffice 20220802
Dim xStrFile As String
Dim xFilePath As String
Dim xFileDlg As FileDialog
Dim xFileDlgItem As Variant
Dim xOutApp As Outlook.Application
Dim xMailOut As Outlook.MailItem
Application.ScreenUpdating = False
Set xOutApp = CreateObject("Outlook.Application")
Set xMailOut = xOutApp.CreateItem(olMailItem)
Set xFileDlg = Application.FileDialog(msoFileDialogFilePicker)
If xFileDlg.Show = -1 Then
With xMailOut
.BodyFormat = olFormatRichText
.To = "xxx@aaa.com"
.Subject = "test"
.HTMLBody = "test"
For Each xFileDlgItem In xFileDlg.SelectedItems
.Attachments.Add xFileDlgItem
Next xFileDlgItem
.Display
End With
End If
Set xMailOut = Nothing
Set xOutApp = Nothing
Application.ScreenUpdating = True
End Sub
注記:
3. 次に、「ツール」>「参照設定」をクリックします。「参照設定 – VBAProject」ダイアログボックスで、「Microsoft Outlook 16.0 Object Library」のチェックボックスを探してチェックし、「OK」ボタンをクリックして変更を保存します。
4. 「F5」キーを押してコードを実行すると、「参照」ウィンドウがポップアップ表示されます。メールに添付する必要のあるファイルを選択し、「OK」をクリックしてください。
その後、メッセージウィンドウがポップアップします。選択したファイルが「添付」フィールドに添付ファイルとして表示されていることが確認できます。
2.1.2 現在のワークシートを添付ファイルとしてメールで送信
現在のワークシートをExcelから添付ファイルとしてメール送信したい場合は、このセクションのVBAスクリプトを適用できます。
1. 「Alt」キーと「F11」キーを押します。
2. 開いた「Microsoft Visual Basic for Applications」ウィンドウで、「挿入」 > 「モジュール」をクリックします。その後、次のVBAコードを「モジュール(コード)」ウィンドウに貼り付けます。
VBAコード:現在のワークシートを添付ファイルとしてメールで送信する
Sub SendWorkSheet()
'Update by Extendoffice 20220802
Dim xFile As String
Dim xFormat As Long
Dim Wb As Workbook
Dim Wb2 As Workbook
Dim FilePath As String
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Application.ScreenUpdating = False
Set Wb = Application.ActiveWorkbook
ActiveSheet.Copy
Set Wb2 = Application.ActiveWorkbook
Select Case Wb.FileFormat
Case xlOpenXMLWorkbook:
xFile = ".xlsx"
xFormat = xlOpenXMLWorkbook
Case xlOpenXMLWorkbookMacroEnabled:
If Wb2.HasVBProject Then
xFile = ".xlsm"
xFormat = xlOpenXMLWorkbookMacroEnabled
Else
xFile = ".xlsx"
xFormat = xlOpenXMLWorkbook
End If
Case Excel8:
xFile = ".xls"
xFormat = Excel8
Case xlExcel12:
xFile = ".xlsb"
xFormat = xlExcel12
End Select
FilePath = Environ$("temp") & "\"
FileName = Wb.Name & Format(Now, "dd-mmm-yy h-mm-ss")
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
Wb2.SaveAs FilePath & FileName & xFile, FileFormat:=xFormat
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "kte features"
.Body = "Please check and read this document."
.Attachments.Add Wb2.FullName
.Display
'.Send
End With
Wb2.Close
Kill FilePath & FileName & xFile
Set OutlookMail = Nothing
Set OutlookApp = Nothing
Application.ScreenUpdating = True
End Sub
注記:
3. 「F5」キーを押してコードを実行すると、現在のワークシートがExcelワークブックとして保存され、メッセージウィンドウに自動的に挿入されて添付ファイルとなります。スクリーンショットをご覧ください:
注: 現在のワークシートのみを含む添付されたワークブックは、元のワークブックと同じ名前を持っています。また、コードを実行した時刻もワークブック名に追加されます。
2.1.3 現在のワークブックを添付ファイルとしてメールで送信
Excelから現在のワークシートを添付ファイルとしてメール送信するためのVBAコードを学んだ後、ここでは別のVBAスクリプトを提供し、それを用いてワークブック全体を添付ファイルとしてメール送信する方法をお伝えします。以下のように操作してください。
1. 「Alt」キーと「F11」キーを押します。
2. 開いた「Microsoft Visual Basic for Applications」ウィンドウで、「挿入」 > 「モジュール」をクリックします。その後、次のVBAコードをモジュール(コード)ウィンドウに貼り付けます。
VBAコード: Excelから現在のワークブックを添付ファイルとしてメールで送信する
Sub SendWorkBook()
'Update by Extendoffice 20220802
Dim OutlookApp As Object
Dim OutlookMail As Object
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
On Error Resume Next
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "kte feature"
.Body = "Hello, please check and read this document, thank you."
.Attachments.Add Application.ActiveWorkbook.FullName
.Display
'.Send
End With
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub
注記:
3. 「F5」キーを押してコードを実行すると、現在のワークブックが自動的にメッセージウィンドウに添付ファイルとして挿入されます。スクリーンショットをご覧ください:
2.1.4 ワークブック全体をPDF添付ファイルとしてメールで送信
ほとんどの人にとって、ExcelワークブックをPDFファイルとして保存し、それを添付ファイルとして他の人に送信することが一般的です。このセクションでは、手動でワークブックをPDFファイルとして保存することなく、現在開いているワークブックをPDF添付ファイルとして直接Excelからメールを送信する方法をご紹介します。
1. 「Alt」キーと「F11」キーを押します。
2. 開いた「Microsoft Visual Basic for Applications」ウィンドウで、「挿入」>「モジュール」をクリックします。その後、次のVBAコードをモジュール(コード)ウィンドウに貼り付けます。
VBAコード: ワークブック全体をPDF添付ファイルとしてメールで送信
Sub SendWorkBookAsPDF()
'Update 20220803
Dim Wb As Workbook
Dim FilePath As String
Dim FileName As String
Dim xOutApp As Object
Dim xOutMail As Object
On Error Resume Next
Application.ScreenUpdating = False
Set Wb = Application.ActiveWorkbook
FileName = Left(Wb.Name, (InStrRev(Wb.Name, ".", -1, vbTextCompare) - 1)) & Format(Now, "dd-mmm-yy h-mm-ss") & ".pdf"
FilePath = Environ$("temp") & "\" & FileName
Wb.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _
FilePath, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
With xOutMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "test"
.Body = "test"
.Attachments.Add FilePath
.Display 'or use .Send
End With
Kill FilePath
Set xOutMail = Nothing
Set xOutApp = Nothing
Application.ScreenUpdating = True
End Sub
注記:
3. 「F5」キーを押してコードを実行します。すると、現在のワークブックが自動的に新しいメッセージウィンドウにPDFファイルの添付として挿入されます。スクリーンショットをご覧ください:
2.1.5 現在のワークシートをPDF添付ファイルとしてメールで送信
例えば、「Monthly sales」という名前のワークブックがあり、その中で「sales report」というワークシートに売上レポートを作成し終え、このワークシートをPDFファイルとして同僚に送りたい場合があります。以下のVBAコードがあなたの役に立つでしょう。
1. 「Alt」キーと「F11」キーを押します。
2. 開いた「Microsoft Visual Basic for Applications」ウィンドウで、「挿入」>「モジュール」をクリックします。その後、次のVBAコードをモジュール(コード)ウィンドウに貼り付けます。
VBAコード: 現在のワークシートをPDF添付ファイルとしてメールで送信する
Sub SendWorkSheetToPDF()
'Update by Extendoffice 20220803
Dim Wb As Workbook
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Set Wb = Application.ActiveWorkbook
FileName = Wb.FullName
xIndex = VBA.InStrRev(FileName, ".")
If xIndex > 1 Then FileName = VBA.Left(FileName, xIndex - 1)
FileName = FileName & "_" + ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "test"
.Body = "test"
.Attachments.Add FileName
.Display
'.Send
End With
Kill FileName
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub
注記:
3. 「F5」キーを押してコードを実行します。すると、現在のワークシートが自動的に新しいメッセージウィンドウにPDFファイルの添付として挿入されます。スクリーンショットをご覧ください:
2.2 Excelから送信されるメールにOutlookの署名を挿入する
上記のケースを例にとると、現在のワークシートをPDFファイルの添付ファイルとしてExcelから送信するために上記のVBAコードを適用しますが、Outlookの署名はメッセージウィンドウに追加できません。 Excelから送信されるメールにOutlookのデフォルト署名を保持するには、次の方法が役立ちます。
以下の2つのVBAコードがリストされています。
VBAコード1:このコードは、Outlookの署名を保持するのに役立ちます。
VBAコード2:このコードは、現在のワークシートをPDF添付ファイルとしてメール送信するのに役立ちます。
VBAコード1:Outlookの署名を保持する
.HTMLBody = "Email body" & "
" & .HTMLBody
VBAコード2:現在のワークシートをPDF添付ファイルとしてメールで送信する
Sub SendWorkSheetToPDF()
'Update by Extendoffice 20220803
Dim Wb As Workbook
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Set Wb = Application.ActiveWorkbook
FileName = Wb.FullName
xIndex = VBA.InStrRev(FileName, ".")
If xIndex > 1 Then FileName = VBA.Left(FileName, xIndex - 1)
FileName = FileName & "_" + ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "test"
.Body = "test"
.Attachments.Add FileName
.Display
'.Send
End With
Kill FileName
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub
1. 通常、「Alt」キーと「F11」キーを押して「Microsoft Visual Basic for Applications」ウィンドウを開く必要があります。
2. 「Microsoft Visual Basic for Applications」ウィンドウで、「挿入」>「モジュール」をクリックします。その後、上記のVBAコード2をモジュール(コード)ウィンドウに貼り付けます。
3. Excelから送信されるメールでOutlookのデフォルト署名を保持するには、VBAコード2を次のように変更する必要があります。
以下は、修正後の完全なコードです。
Sub SendWorkSheetToPDF()
'Update by Extendoffice 20220803
Dim Wb As Workbook
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Set Wb = Application.ActiveWorkbook
FileName = Wb.FullName
xIndex = VBA.InStrRev(FileName, ".")
If xIndex > 1 Then FileName = VBA.Left(FileName, xIndex - 1)
FileName = FileName & "_" + ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
.Display
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "test"
.HTMLBody = "Email body" & "
" & .HTMLBody
.Attachments.Add FileName
'.Send
End With
Kill FileName
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub
4. 「F5」キーを押してコードを実行します。すると、現在のワークシートがPDFファイルとして添付された新しいメッセージウィンドウが表示され、Outlookのデフォルト署名がメール本文の最後に自動的に挿入されます。
3. 条件が満たされたときにExcelから自動的にメールを送信する(VBAスクリプトを使用)
上記の例では、メールの送信を実現するためにコードを手動で実行する必要があります。特定の条件が満たされたときにコードを自動的にトリガーしたい場合、例えばセルがある値に達したとき、セルの値が変更されたとき、日付に到達したときなどには、メールが自動的に送信されます。このセクションでは、GoogleでExcelユーザーがよく検索する条件をリストアップし、特定の条件が満たされたときにExcelから自動的にメールを送信できるようにします。
3.1 セルが特定の値に達したときに自動的にメールを送信
以下のスクリーンショットに示すように、D6のセルに売上合計が含まれている販売表があると仮定します。あなたは、売上合計に基づいて上司に自動的にメールを送信したいと考えています。例えば、売上合計が10000を超えた場合にメールを作成または自動送信し、売上合計が10000以下の場合には何もアクションを取らないようにしたいです。
1. 売上表が含まれるワークシートで、シートタブを右クリックし、右クリックメニューから「コードの表示」をクリックします。
2. 開いた「Microsoft Visual Basic for Applications」ウィンドウで、次のVBAコードを「Sheet (Code)」ウィンドウに貼り付けます。
VBAコード: Excelでセルがある値に達したときに自動的にメールを送信する
Dim xRg As Range
'Update by Extendoffice 20200803
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Cells.Count > 1 Then Exit Sub
Set xRg = Intersect(Range("D6"), Target)
If xRg Is Nothing Then Exit Sub
If IsNumeric(Target.Value) And Target.Value > 10000 Then
Call Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp As Object
Dim xOutMail As Object
Dim xMailBody As String
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hi boss" & vbNewLine & vbNewLine & _
"Total sales of over $10,000 in January: " & Range("D6")
On Error Resume Next
With xOutMail
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.Subject = "test"
.Body = xMailBody
.Display 'or use .Send
End With
On Error GoTo 0
Set xOutMail = Nothing
Set xOutApp = Nothing
End Sub
Private Sub Worksheet_Calculate()
Dim xI As Integer
Dim xRg As Range
Set xRg = Range("D6")
On Error GoTo Err01
xI = Int(xRg.Value)
If xI > 10000 Then
Call Mail_small_Text_Outlook
End If
Err01:
End Sub
注記:
xMailBody = "Hi boss" & vbNewLine & vbNewLine & _
"Total sales of over $10,000 in January: " & Range("D6")
今後、セル D6 の値が 10000 を超えた場合、以下のスクリーンショットに示すように、メールが作成されます。
3.2 セルの値が変更されたときに自動的にメールを送信
以下のスクリーンショットに示すように、異なるワークシートに月ごとの売上が記載され、あるワークシートに売上の合計が記載されたワークブックを受け取ったと仮定します。この場合、売上の合計を確認する必要があります。また、売上の合計が変更された場合、そのワークブックを送信者に返送し、セルが変更されたことを送信者に通知する必要があります。
1. 売上表が含まれるワークシートで、シートタブを右クリックし、右クリックメニューから「コードの表示」をクリックします。
2. 開いた「Microsoft Visual Basic for Applications」ウィンドウで、次のVBAコードをSheet(コード)ウィンドウに貼り付けます。
VBAコード: 指定されたセルの値が変更されたときに自動的にメールを送信する
Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20220803
Dim xRgSel As Range
Dim xOutApp As Object
Dim xMailItem As Object
Dim xMailBody As String
Dim xBoolean As Boolean
Dim xItsRG As Range
Dim xDDs As Range
Dim xDs As Range
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
xBoolean = False
Set xRg = Range("B14")
Set xItsRG = Intersect(Target, xRg)
Set xDDs = Intersect(Target.DirectDependents, xRg)
Set xDs = Intersect(Target.Dependents, xRg)
If Not (xItsRG Is Nothing) Then
Set xRgSel = xItsRG
xBoolean = True
ElseIf Not (xDDs Is Nothing) Then
Set xRgSel = xDDs
xBoolean = True
ElseIf Not (xDs Is Nothing) Then
Set xRgSel = xDs
xBoolean = True
End If
ActiveWorkbook.Save
If xBoolean Then
Debug.Print xRgSel.Address
Set xOutApp = CreateObject("Outlook.Application")
Set xMailItem = xOutApp.CreateItem(0)
xMailBody = "The cell " & xRgSel.Address(False, False) & _
" in the worksheet '" & Me.Name & "' were modified on " & _
Format$(Now, "mm/dd/yyyy") & " at " & Format$(Now, "hh:mm:ss") & _
" by " & Environ$("username") & "."
With xMailItem
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.Subject = "Worksheet modified"
.Body = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Display
End With
Set xRgSel = Nothing
Set xOutApp = Nothing
Set xMailItem = Nothing
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
注: コード内では
これから、セル B14 の値が変更されるたびに、以下のスクリーンショットに示すように、Outlook のメッセージが自動的に作成されます。
3.3 ワークブックを保存する際に自動的にメールを送信
他の人と共有する必要があるワークブックを修正した後、通常はそのワークブックを保存し、メールクライアントを起動して新しいメールを作成し、そのワークブックを添付し、必要なフィールドを入力してからメールを送信する必要があります。このセクションでは、ワークブックを保存するたびに自動的にメールを作成する方法を紹介します。以下の手順に従ってください。
1. 「Alt」キーと「F11」キーを押して、「Microsoft Visual Basic for Applications」ウィンドウを開きます。
2. このウィンドウで、「プロジェクト」ペイン内の「ThisWorkbook」をダブルクリックし、次のVBAコードを「ThisWorkbook (コード)」ウィンドウに貼り付けます。
VBAコード: ワークブックを保存する際に自動的にメールを送信する
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
'Updated by Extendoffice 20220804
Dim xOutApp As Object
Dim xMailItem As Object
Dim xName As String
On Error Resume Next
Set xOutApp = CreateObject("Outlook.Application")
Set xMailItem = xOutApp.CreateItem(0)
xName = ActiveWorkbook.FullName
With xMailItem
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.Subject = "The workbook has been updated"
.Body = "Hi," & Chr(13) & Chr(13) & "File is now updated."
.Attachments.Add xName
.Display
'.send
End With
Set xMailItem = Nothing
Set xOutApp = Nothing
End Sub
注: コード内では
3. 今後、ワークブックを保存する際に「Ctrl」+「S」キーを押すか、「保存」ボタンをクリックすると、Outlookのメールが自動的に作成されます。現在のワークブックが添付ファイルとして添付され、フィールドには指定された内容が入力されていることが確認できます。スクリーンショットをご覧ください:
ヒント:このワークブックを頻繁に使用する場合、VBAスクリプトを将来の使用のために保存するために、ワークブックを「Excelマクロ有効ワークブック」として保存することをお勧めします。手順は次のとおりです。
3.4 特定の時間に自動的にメールを送信
たとえば、毎週金曜日の午前9時にタスク割り当てのワークブックを誰かに送信する必要があり、メールクライアントを手動で操作することなくExcelでこれを自動化したいとします。このセクションでは、その方法を紹介します。
1. 「Alt」キーと「F11」キーを押して、「Microsoft Visual Basic for Applications」ウィンドウを開きます。
2. 「Microsoft Visual Basic for Applications」ウィンドウで、「挿入」>「モジュール」をクリックします。その後、次のVBAコードをモジュールウィンドウに貼り付けます。
VBAコード1: Excelから現在のワークブックを添付ファイルとしてメールで送信する
Sub Timer()
If Weekday(Date) = vbFriday Then
SendWorkBook
Application.OnTime TimeValue("09:00:00"), "Timer"
Else
Application.OnTime TimeValue("09:00:00"), "Timer"
End If
End Sub
Sub SendWorkBook()
'Update by Extendoffice 20220802
Dim OutlookApp As Object
Dim OutlookMail As Object
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
On Error Resume Next
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "kte feature"
.Body = "Hello, please check and read this document, thank you."
.Attachments.Add Application.ActiveWorkbook.FullName
.Display
'.Send
End With
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub
3. このウィンドウで、[プロジェクト] ペイン内の "ThisWorkbook" をダブルクリックし、次の VBA コードを [ThisWorkbook (コード)] ウィンドウに貼り付けます。
VBAコード2:特定の時間に自動的にメールを送信する
Private Sub Workbook_Open()
Application.OnTime TimeValue("09:00:00"), "Timer"
End Sub
注記:
4. コードを保存し、その後、次のようにしてワークブックをExcelのマクロ有効ワークブックとして保存します。
5. 保存したマクロ有効のワークブックを開くと、指定された日時が来るとメールが自動的に作成または送信されます。
4. 追加トピック
このセクションでは、Excelからメールを送信する際に遭遇する可能性のあるその他のトピックをまとめています。
4.1 Excelからセルの範囲をメールで送信する(VBAスクリプトを使用)
以下のスクリーンショットに示すように、Excelワークシートに月次売上表が存在すると仮定し、この月次売上表をメールの本文として、または直接添付ファイルとして他の人に送信する必要があるとします。ここでは、その目的を達成するための2つの方法を提供します。
4.1.1 Excelから範囲を本文の一部としてメールで送信
次のVBAコードを実行して、Excelからメール本文の一部としてセルの範囲を送信できます。
1. 「Alt」キーと「F11」キーを押して、「Microsoft Visual Basic for Applications」ウィンドウを開きます。
2. 「Microsoft Visual Basic for Applications」ウィンドウで、「ツール」 > 「参照設定」をクリックします。その後、「References – VBAProject」ダイアログボックスで「Microsoft Outlook 16.0 Object Library」のチェックボックスをオンにして「OK」をクリックします。
3. 「挿入」>「モジュール」をクリックし、次のVBAコードを「モジュール(コード)」ウィンドウに貼り付けます。
VBAコード: Excelからメール本文の一部としてセルの範囲を送信
Sub SendARangeofCells()
'Updated by Extendoffice 20220809
Dim xRg As Range
Dim I, J As Long
Dim xAddress As String
Dim xMailOut As Object
Dim xOutApp As Object
On Error Resume Next
Set xOutApp = CreateObject("Outlook.Application")
Set xMailOut = xOutApp.CreateItem(olMailItem)
xAddress = ActiveWindow.RangeSelection.Address
Set xRg = Application.InputBox("Please select range you need to paste into email body", "KuTools For Excel", xAddress, , , , , 8)
If xRg Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Set xOutApp = CreateObject("Outlook.Application")
Set xMailOut = xOutApp.CreateItem(olMailItem)
With xMailOut
.Subject = "test"
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.HTMLBody = RangetoHTML(xRg)
.Display
'.Send
End With
Set xMailOut = Nothing
Set xOutApp = Nothing
Application.ScreenUpdating = True
End Sub
' The following VBA script is cited from this page:
' https://stackoverflow.com/questions/18663127/paste-excel-range-in-outlook
Function RangetoHTML(rng As Range)
' By Ron de Bruin.
Dim fso As Object
Dim ts As Object
Dim TempFile As String
Dim TempWB As Workbook
TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
'Copy the range and create a new workbook to past the data in
rng.Copy
Set TempWB = Workbooks.Add(1)
With TempWB.Sheets(1)
.Cells(1).PasteSpecial Paste:=8
.Cells(1).PasteSpecial xlPasteValues, , False, False
.Cells(1).PasteSpecial xlPasteFormats, , False, False
.Cells(1).Select
Application.CutCopyMode = False
On Error Resume Next
.DrawingObjects.Visible = True
.DrawingObjects.Delete
On Error GoTo 0
End With
'Publish the sheet to a htm file
With TempWB.PublishObjects.Add( _
SourceType:=xlSourceRange, _
Filename:=TempFile, _
Sheet:=TempWB.Sheets(1).Name, _
Source:=TempWB.Sheets(1).UsedRange.Address, _
HtmlType:=xlHtmlStatic)
.Publish (True)
End With
'Read all data from the htm file into RangetoHTML
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
RangetoHTML = ts.ReadAll
ts.Close
RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
"align=left x:publishsource=")
'Close TempWB
TempWB.Close savechanges:=False
'Delete the htm file we used in this function
Kill TempFile
Set ts = Nothing
Set fso = Nothing
Set TempWB = Nothing
End Function
注: コード内では
4. 「F5」キーを押してコードを実行します。「Kutools for Excel」ダイアログボックスが表示されたら、メール本文の一部として送信する必要があるセルの範囲を選択し、「OK」をクリックします。スクリーンショットをご覧ください:
その後、Outlookのメールが自動的に作成されます。ワークシートで選択した範囲がメール本文に挿入されていることが確認できます。スクリーンショットをご覧ください:
4.1.2 Excelから範囲を添付ファイルとしてメールで送信
ワークシート内のセルの範囲をExcelから添付ファイルとしてメールで送信する必要がある場合、次のVBAコードを試すことができます。
1. 「Alt」キーと「F11」キーを押します。
2. 開いた「Microsoft Visual Basic for Applications」ウィンドウで、「挿入」 > 「モジュール」をクリックします。その後、次のVBAコードを「モジュール(コード)」ウィンドウに貼り付けます。
VBAコード: Excelから範囲を添付ファイルとしてメールで送信する
Sub SendRange()
'Update 20220809
Dim xFile As String
Dim xFormat As Long
Dim Wb As Workbook
Dim Wb2 As Workbook
Dim Ws As Worksheet
Dim FilePath As String
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim WorkRng As Range
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set Wb = Application.ActiveWorkbook
Wb.Worksheets.Add
Set Ws = Application.ActiveSheet
WorkRng.Copy Ws.Cells(1, 1)
Ws.Copy
Set Wb2 = Application.ActiveWorkbook
Select Case Wb.FileFormat
Case xlOpenXMLWorkbook:
xFile = ".xlsx"
xFormat = xlOpenXMLWorkbook
Case xlOpenXMLWorkbookMacroEnabled:
If Wb2.HasVBProject Then
xFile = ".xlsm"
xFormat = xlOpenXMLWorkbookMacroEnabled
Else
xFile = ".xlsx"
xFormat = xlOpenXMLWorkbook
End If
Case Excel8:
xFile = ".xls"
xFormat = Excel8
Case xlExcel12:
xFile = ".xlsb"
xFormat = xlExcel12
End Select
FilePath = Environ$("temp") & "\"
FileName = Wb.Name & Format(Now, "dd-mmm-yy h-mm-ss")
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
Wb2.SaveAs FilePath & FileName & xFile, FileFormat:=xFormat
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.Subject = "Monthly sales for 2021"
.Body = "Hello, please check and read this document. "
.Attachments.Add Wb2.FullName
.Display
'.Send
End With
Wb2.Close
Kill FilePath & FileName & xFile
Set OutlookMail = Nothing
Set OutlookApp = Nothing
Ws.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
注記:
3. 「F5」キーを押してコードを実行します。表示される「Kutools for Excel」ダイアログボックスで、メールの添付ファイルとして送信するセルの範囲を選択し、「OK」をクリックします。スクリーンショットをご覧ください:
その後、Outlookのメールが自動的に作成されます。そして、ワークシートで選択したセルの範囲はExcelワークブックとして保存され、メッセージウィンドウに添付されます。スクリーンショットをご覧ください:
4.2 ボタンがクリックされたときにExcelからメールを送信する
Excelからメールを送信するためにマクロをトリガーするコマンドボタンをクリックする必要がある場合、例えば、ワークシート内のコマンドボタンをクリックして現在のワークブックを他のユーザーに添付ファイルとして送信するようなケースです。以下の手順に従って操作を完了できます。
1. 「開発」をクリックし、「挿入」→「コマンドボタン(ActiveXコントロール)」を選択します。その後、ワークシート上にコマンドボタンを描画します。
ヒント: すでにコマンドボタンがある場合は、このステップをスキップしてください。
2. 「Alt」キーと「F11」キーを押して、「Microsoft Visual Basic for Applications」ウィンドウを開きます。ウィンドウ内で「挿入」>「モジュール」をクリックし、その後 Module (コード) ウィンドウにVBAコード(現在のワークブックをExcelから添付ファイルとしてメール送信するために使用されるコード)を貼り付けます。
注: ここで、ステップ2で作成したマクロの名前は「SendWorkbook」です。
3. 「Alt」キーと「Q」キーを押して、「Microsoft Visual Basic for Applications」ウィンドウを閉じます。
4. ここで、マクロをコマンドボタンに割り当てる必要があります。コマンドボタンを右クリックし、右クリックメニューから「コードの表示」を選択してください。
5. その後、「Microsoft Visual Basic for Applications」ウィンドウがポップアップ表示され、「Sheet (Code)」ウィンドウに次の2行がリストされているのが確認できます。
Private Sub CommandButton1_Click()
End Sub
6. コマンドボタンのサブプロシージャ内に既存のマクロの名前を入力します。
7. 「Alt」キーと「Q」キーを押して「Visual Basic Editor」を閉じ、[開発] タブの [デザインモード] をクリックしてデザインモードをオフにします。
これで、現在のワークブックを添付ファイルとして含むメールを送信するためのコマンドボタンをクリックできます。
4.3 指定されたメールアカウントからメールを送信
通常、VBAコードを使用してExcelからメールを送信する場合、送信者のメールアカウントはOutlookのデフォルトアカウントになります。ただし、Outlookに複数のメールアカウントを設定しており、デフォルトアカウントではなく特定のアカウントを使用してExcelからメールを送信したい場合があります。次のVBAコードが役立ちます。
この場合、次のコードが必要です。
VBAコード1:
Dim OutlookMail As Outlook.MailItem
VBAコード2:
For Each xAccount In OutlookApp.Session.Accounts
If VBA.LCase(xAccount.SmtpAddress) = VBA.LCase("zxm@addin99.com") Then 'Specify your email account here
OutlookMail.SendUsingAccount = xAccount
End If
Next
上記のVBAコードの使用方法は?
この例では、特定のメールアカウントを指定して、現在のワークブックをExcelから添付ファイルとして送信します。以下の手順に従ってください。
1. 「Alt」キーと「F11」キーを押します。「Microsoft Visual Basic for Applications」ウィンドウで、「ツール」>「参照設定」をクリックします。その後、「References – VBAProject」ダイアログボックスで「Microsoft Outlook 16.0 Object Library」のチェックボックスをオンにして「OK」をクリックします。
2. 「挿入」>「モジュール」をクリックします。その後、次のVBAコードを「モジュール(コード)」ウィンドウに貼り付けます。
VBAコード: 指定されたOutlookアカウントを介してExcelから現在のワークブックをメール添付ファイルとして送信する
Sub SendWorkBook()
'Update by Extendoffice 20220809
Dim OutlookApp As Object
Dim OutlookMail As Outlook.MailItem 'important! Here can’t be declared as Object
Dim xAccount As Account
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(olMailItem)
On Error Resume Next
'The following lines helps to specify a certian email account
For Each xAccount In OutlookApp.Session.Accounts
If VBA.LCase(xAccount.SmtpAddress) = VBA.LCase("zxm@addin99.com") Then 'Specify your email account here
OutlookMail.SendUsingAccount = xAccount
End If
Next
'End
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "kte feature"
.Body = "Hello, please check and read this document, thank you."
.Attachments.Add Application.ActiveWorkbook.FullName
.Display
'.Send
End With
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub
3. 「F5」キーを押してコードを実行します。その後、Outlookのメールメッセージがポップアップで表示され、「From(差出人)」フィールドにコードで指定したメールアカウントが入力されていることが確認できます。
4.4 日付に達したときにメールを送信する
特定の期日に基づいてメールを送信する必要がある場合、例えば、以下のスクリーンショットに示すように、プロジェクト表があり、「範囲E2:E7内の期日が今日(現在の日付が2022/8/4と仮定)から7日以内またはそれ以下である場合」、対応するプロジェクトリーダーに自動的にメールが送信され、プロジェクトの期限が近づいていることを通知します。
1. プロジェクト表が含まれるワークシートで、シートタブを右クリックし、右クリックメニューから「コードの表示」をクリックします。
2. 開いた「Microsoft Visual Basic for Applications」ウィンドウで、次のVBAコードを「Sheet (Code)」ウィンドウに貼り付けます。
VBAコード: 期日が到来したときに自動的にメールを送信する
Public Sub SendMailDueDate()
'Updated by Extendoffice 20220804
Dim xRgDate As Range
Dim xRgSend As Range
Dim xRgText As Range
Dim xRgDone As Range
Dim xOutApp As Object
Dim xMailItem As Object
Dim xLastRow As Long
Dim vbCrLf As String
Dim xMailBody As String
Dim xRgDateVal As String
Dim xRgSendVal As String
Dim xMailSubject As String
Dim i As Long
On Error Resume Next
Set xRgDate = Range("E2:E7") 'Please reference the due date column range
If xRgDate Is Nothing Then Exit Sub
Set xRgSend = Range("C2:C7") 'Please reference the email addresses column range
If xRgSend Is Nothing Then Exit Sub
Set xRgText = Range("D2:D7") 'Please reference the remark column range (the remark used to notify project leaders of the expiration of the project)
If xRgText Is Nothing Then Exit Sub
xLastRow = xRgDate.Rows.Count
Set xRgDate = xRgDate(1)
Set xRgSend = xRgSend(1)
Set xRgText = xRgText(1)
Set xOutApp = CreateObject("Outlook.Application")
For i = 1 To xLastRow
xRgDateVal = ""
xRgDateVal = xRgDate.Offset(i - 1).Value
If xRgDateVal <> "" Then
If CDate(xRgDateVal) - Date <= 7 And CDate(xRgDateVal) - Date > 0 Then
xRgSendVal = xRgSend.Offset(i - 1).Value
xMailSubject = xRgText.Offset(i - 1).Value & " on " & xRgDateVal
vbCrLf = "
"
xMailBody = ""
xMailBody = xMailBody & "Dear " & xRgSendVal & vbCrLf
xMailBody = xMailBody & "Remark : " & xRgText.Offset(i - 1).Value & vbCrLf
xMailBody = xMailBody & ""
Set xMailItem = xOutApp.CreateItem(0)
With xMailItem
.Subject = xMailSubject
.To = xRgSendVal
.CC = "Email address"
.BCC = "Email address"
.HTMLBody = xMailBody
.Display
'.Send
End With
Set xMailItem = Nothing
End If
End If
Next
Set xOutApp = Nothing
End Sub
注: コード内では
3. 「F5」キーを押してコードを実行します。その後、有効期限が条件に一致する場合、対応するメールが作成されます。この場合、以下のスクリーンショットに示すように、2通のメールが作成されます。
5. Excelから簡単にメールを送信するための便利なツール
VBAの初心者の方にとって、上記の方法は扱いにくい場合があります。そこで、「Kutools for Excel」の「Send Emails」機能をおすすめします。この機能を使えば、数回のクリックだけでExcelから簡単にメールを送信できます。以下のように操作してください。
5.1 メールに必要なフィールドを含むメーリングリストを簡単に作成できます。
メール送信機能を適用する前に、必要なメールフィールドを含むメーリングリストを作成する必要があります。ここで、メーリングリストの作成機能が役立ちます。
1. 「Kutools Plus」をクリックし、続いて「メーリングリストの作成」を選択します。
2. 開いた「メーリングリストの作成」ウィンドウで、次の設定を行う必要があります。
その後、以下のスクリーンショットに示すように、サンプルのメーリングリスト表が作成されます。
3. ここで、サンプル内の元のデータを自分のフィールドデータに置き換える必要があります。
これでメーリングリストの表が作成されました。作成したフィールドに基づいてExcelからメールを送信するために、「メールを送信」機能を適用してください。
Kutools for Excel - 必要なツールを300以上搭載し、Excelの機能を大幅に強化します。永久に無料で利用できるAI機能もお楽しみください!今すぐ入手
5.2 メーリングリストで作成したフィールドを含むメールを簡単に送信できます。
メールに必要なフィールドを含むメーリングリスト(クリックして作成方法を確認)を作成後、これらのフィールドを使用してExcelからメールを送信できるようになります。
1. メーリングリスト全体を選択し、"Kutools Plus" > "Send Emails" をクリックします。
2. 「メールを送信」ダイアログボックスで、次の設定を行ってください。
3. 次に、「Kutools for Excel」ダイアログボックスが表示され、送信されたメールの数を通知します。「OK」ボタンをクリックしてこのダイアログボックスを閉じてください。
ヒント: Outlookの「送信済みアイテム」フォルダに移動して、送信したメールを確認できます。
5.3 HTML本文(ハイパーリンクや画像など含む)付きのメールを簡単に送信
このメール送信機能を使用すると、ハイパーリンク、画像、さまざまなフォントサイズやフォントの色などを含むHTMLメールを作成できます。
必要なメールフィールドを含むメーリングリストを作成後、[Send Emails] ダイアログボックスを設定する際、ツールバーのオプションを使用して本文の内容を充実させることができます。
下のスクリーンショットをご覧ください:
5.4 メールを送信する際にOutlookのデフォルト署名を簡単に挿入
上記の方法では、Outlookのデフォルト署名を含むメールを送信するために役立つVBAコードを紹介しました。ここで、メール送信機能を使用すると、オプションをチェックするだけで、Excelから送信するメールにOutlookのデフォルト署名が挿入されます。
必要なメールフィールドを含むメーリングリストを作成後、[メールを送信] ダイアログボックスを設定する際には、「オプション」>「Outlook の署名設定を使用」をクリックする必要があります。
注: [Use Outlook’s signature settings] オプションの前にチェックマークが表示されていることを確認してください。
受信者がメールを受信すると、メール本文の末尾にOutlookのデフォルト署名が表示されます。
5.5 指定されたメールアカウントから簡単にメールを送信
Excelからデフォルトのアカウントではなく、特定のメールアカウントを使用してメールを送信する場合、[Send Emails]機能を使用すると簡単に実現できます。
必要なメールフィールドを含むメーリングリストを作成後、[メールを送信] ダイアログボックスを設定する際には、「オプション」>「送信元」をクリックし、その後メールを送信するメールアカウントをクリックする必要があります。
注: メールアカウントを選択すると、その前にチェックマークが表示されます。
このメール送信機能についての詳細は、こちらをクリックしてください。
Kutools for Excel - 必要なツールを300以上搭載し、Excelの機能を大幅に強化します。永久に無料で利用できるAI機能もお楽しみください!今すぐ入手
結論として、Excelからメールを送信することは日常業務で非常に役立ちます。この記事では、Excelからのメール送信に関するより包括的なトピックを取り上げています。他のトピックやより簡単な解決策があれば、コメントを残して教えてください。
最高のオフィス生産性ツール
🤖 | Kutools AI アシスタント: データ分析を革命化する: インテリジェント実行 | コード生成 | カスタム数式の作成 | データを分析しグラフを生成 | 拡張機能を呼び出す… |
人気の機能: 重複を見つけてハイライトまたはマーキング | 空白行を削除 | データを失わずに列またはセルを統合 | 丸める ... | |
スーパーLOOKUP: 複数条件のVLookup | 複数値のVLookup | 複数シートの検索 | ファジーマッチ .... | |
高度なドロップダウンリスト: ドロップダウンリストを迅速に作成 | 依存ドロップダウンリスト | マルチセレクトドロップダウンリスト .... | |
列管理: 特定の数の列を追加 | 列を移動 | 非表示列の可視ステータスを切り替え | 範囲と列を比較 ... | |
注目の機能: グリッドフォーカス | デザインビュー | 強化された数式バー | ワークブック & ワークシート管理 | オートテキスト ライブラリ (Auto Text) | 日付ピッカー | データの統合 | セルの暗号化/復号化 | リストで電子メールを送信 | スーパーフィルター | 特殊フィルタ (太字/斜体/取り消し線をフィルタリング...) ... | |
トップ15のツールセット: 12 のテキストツール (テキストの追加, 特定の文字を削除, ...) | 50以上 のグラフ の種類 (ガントチャート, ...) | 40以上の実用的な 数式 (誕生日に基づいて年齢を計算する, ...) | 19 の挿入ツール (QRコードの挿入, パスから画像を挿入, ...) | 12 の変換ツール (単語に変換する, 通貨変換, ...) | 7 の統合 & セルの分割ツール (高度な行のマージ, セルの分割, ...) | ...さらに多く |
Kutools for ExcelでExcelスキルを強化し、これまでにない効率を体験してください。 Kutools for Excelは、300以上の高度な機能を提供し、生産性を向上させ、保存時間を節約します。 最も必要な機能を入手するにはここをクリック...
Office TabはOfficeにタブインターフェイスをもたらし、作業を非常に簡単にします
- Word、Excel、PowerPoint、Publisher、Access、Visio、Projectでタブ付きの編集と読み取りを有効にします。
- 新しいウィンドウではなく、同じウィンドウの新しいタブで複数のドキュメントを開いて作成します。
- 生産性を50%向上させ、毎日数百回のマウスクリックを減らします!