メインコンテンツへスキップ

Excel チュートリアル – Excel からメールを送信する

Author: Siluvia Last Modified: 2025-05-27

通常、私たちはOutlookやGmailなどのメールクライアントを使用してメールを送信します。しかし、多くの人がデータをExcelワークブックに保存しており、そのデータの一部を他の人に送る必要がある場合があります。そのため、メールクライアントを操作する時間を節約するために、Excelワークブックから直接メールを送信したいという需要があります。このステップバイステップのチュートリアルでは、さまざまな状況下でExcelからメールを送信する方法を紹介します。

注: 以下の方法を適用する前に、コンピュータにOutlookメールクライアントを設定し、それをデフォルトのメールクライアントとして設定する必要があります。

目次: [ 非表示 ]

(以下の目次または右側の任意の見出しをクリックして、対応する章に移動します。)

1. Excelからメールを送信する基本

このセクションでは、Excelからメールを送信する基本事項を紹介します。

1.1 Excelの組み込み関数を使用してExcelからメールを送信する

ExcelからTo、件名、Cc、本文フィールドのみを含むシンプルなメールを送信したい場合、Excelの組み込み機能が役立ちます。


1.1.1 数式を使用してExcelからメールを送信する

下の表に示すように、Excel で指定されたフィールドに基づいて異なるメールを送信するには、指定されたフィールドのセル参照を使用して異なるハイパーリンク数式を作成することで対応できます。メールのハイパーリンクを作成後、そのハイパーリンクをクリックすることで自動的にメールを送信できます。

注: ToフィールドまたはCcフィールドに複数の受信者がいる場合は、セミコロンで区切ってください。

このセクションは、Hyperlink数式にメールアドレス、Ccの受信者、件名、本文テキストをそれぞれ追加する手順を示すために4つの部分に分かれています。以下のように操作してください。

「HYPERLINK」関数の構文と引数は次のとおりです。

構文

ハイパーリンク(link_location, [friendly_name])

引数

"リンク先"(必須):開くドキュメントへのパスとファイル名。
ヒント: このチュートリアルでは、メールに必要なすべてのフィールド(受信者のメールアドレス、Cc受信者、件名、本文など)を最初の引数「link_location」に含める必要があります。
"フレンドリーネーム"(オプション):セルに表示されるジャンプ値です。

1.1.1.1 ハイパーリンク数式にメールアドレスを追加

ここでは、メール受信者を追加するために数式の一部として "mailto:" を使用します。この例では、最初の受信者のメールアドレスはセル B2 にあるため、「mailto:」を追加し、それをセル B2 に参照させる必要があります。

“mailto:”&B2

1. ハイパーリンクを表示するセルを選択します。この場合、セル F2 を選択します。

2. 次に、次の数式を入力します。

=HYPERLINK("mailto:"&B2)

注: 「Enter」キーを押すと、下のスクリーンショットに示すようにハイパーリンクが作成されます。リンクをクリックすると、Outlookのメールが作成され、宛先のメールアドレスが自動的に「To(宛先)」フィールドに入力されます。

受信者のメールアドレスがハイパーリンク数式に追加されました。必要に応じて、次の手順に従って件名、Cc受信者、本文テキストを追加してください。


1.1.1.2 ハイパーリンク数式にCc受信者を追加

Hyperlink関数にCcの受信者を追加するには、次のように「?cc=」を数式の一部として追加してください。

"?cc=" & C2
ここで、C2にはCC受信者のメールアドレスが含まれています。

セル F2 の数式は次のようになります:

=HYPERLINK("mailto:" & B2 & "?cc=" & C2)


1.1.1.3 ハイパーリンク数式に件名行を追加

ハイパーリンク関数に件名行を追加するには、次のように「&subject=」を数式の一部として追加してください。

"&subject="& D2
ここで、D2 にはメールの件名が含まれています。

セル F2 の数式は、次のようになっているはずです:

=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2)


1.1.1.4 ハイパーリンク数式に行区切りを含む本文を追加

最後のステップは、本文テキストをハイパーリンク数式に追加することです。例で見られるように、E2の2行のテキストは改行で区切られており、その改行をメール本文にも保持したいと考えています。この場合、Outlookは改行を認識してくれるのでしょうか? 確認してみましょう。

ハイパーリンク数式に本文を追加するには、次のように数式の一部として「&body=」を追加する必要があります。

"&body="& E2
ここで、E2 にはメールの本文が含まれています。

セル 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. 表示された「ハイパーリンクの挿入」ダイアログボックスで、次の設定を行う必要があります。

2.1) 左ペインで「E-mail Address」を選択します。
2.2) 「表示するテキスト」のテキストボックスに、セルに表示したいテキストを入力します。
ヒント: このダイアログボックスではセル参照を使用できないため、以下のメールフィールドを手動で入力する必要があります。
2.3) 「Eメールアドレス」のテキストボックスに、次のメールアドレスを入力する必要があります。
mailto:メールアドレス
「email address」というテキストを実際のメールアドレスに置き換えてください。メールアドレスが複数ある場合は、セミコロンで区切ってください。
2.4) 「件名」テキストボックスで、メールの件名と本文をここで指定できます。次の通りに設定してください:
件名&本文=メール本文
この場合、私は "Monthly sale&body=Hi,%0AEmail received" と入力します。
件名が「月次セール」の場合;
および
メール本文は次のとおりです:
こんにちは、
メールが受信されました。("%0A" は、Outlookで認識可能なキャリッジリターンの文字コードです)
2.5) 「OK」ボタンをクリックして、ハイパーリンクを保存します。スクリーンショットをご覧ください:

ハイパーリンクをクリックすると、下のスクリーンショットに示すように、指定された宛先、件名、本文フィールドを使用してOutlookのメールが作成されます。

注記:

1) この方法では、メールのハイパーリンクを一つずつ手動で作成する必要があります。
2) この方法では、メールにCcフィールドを追加することはできません。したがって、Ccフィールドが必要な場合は、新しく開いたメールウィンドウから追加してください。

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」をクリックしてください。

A screenshot of the 'Kutools for Excel' dialog box asking for the email addresses list

注記:

1) 上記のダイアログボックスが表示されないようにしたい場合、またはコード内で直接メールアドレスの範囲を指定したい場合は、次の行を置き換えてください:
xRg = Application.InputBox("アドレスリストを選択してください:", "Kutools for Excel", xTxt, , , , , 8) に設定
使用して
Set xRg = Range("A2:A7")
2) 以下の行であなた自身のメールの件名と本文を指定できます:
.Subject = "テスト"
.Body = "Dear " _
        & vbNewLine & vbNewLine & _
        "This is a test email " & _
        "sending in Excel"
3) 次の新しいメッセージウィンドウを開かずにメールを直接送信するには、この行を置き換える必要があります:
.表示
使用して
.送信

コードを実行後、選択範囲内のすべてのメールアドレスがメッセージウィンドウの「To(宛先)」フィールドに表示されます。スクリーンショットをご覧ください:

A screenshot of the email message window with all email addresses filled in the To field


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」ボタンをクリックして変更を保存します。

A screenshot of the 'References – VBAProject' dialog box in Excel with the Microsoft Outlook 16.0 Object Library option selected

4. 「F5」キーを押してコードを実行すると、「Kutools for Excel」ダイアログボックスが表示されます。メールアドレスのリストを選択して「OK」をクリックしてください。

A screenshot of the 'Kutools for Excel' dialog box asking for the email address list selection

注記:

1) 上記のダイアログボックスが表示されないようにしたい場合、またはコード内に直接メールアドレスの範囲を指定したい場合は、次の行を置き換えてください:
xRg = Application.InputBox("アドレスリストを選択してください:", "Kutools for Excel", xTxt, , , , , 8) に設定
使用して
Set xRg = Range("A2:A7")
2) 以下の行であなた自身のメールの件名と本文を指定できます:
.Subject = "Test"
.Body = "Dear " _
        & vbNewLine & vbNewLine & _
        "This is a test email " & _
        "sending in Excel"
3) 次のメッセージウィンドウを開かずにメールを直接送信するには、この行を置き換える必要があります:
.表示
使用して
.送信

この例では、選択範囲に6つのメールアドレスがあるため、スクリーンショットに示すように、[To]フィールドに個別のメールアドレスが自動的に記載された6つのOutlookメッセージウィンドウが作成されます。

A screenshot of multiple Outlook message windows with separate email addresses in the To field

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

注記:

1) 「.To = xxx@aaa.com」という行では、「xxx@aaa.com」を受信者のメールアドレスに置き換えてください。
2) 行の ".Subject = "test"" と ".HTMLBody = "test"" で、メールの件名と本文をそれぞれ変更します。
3) 必要に応じて、CcやBccの受信者を追加できます。単に「To = xxx@aaa.com」という行の下に次の2行を追加するだけです。
.CC = "メールアドレス"
.BCC = "メールアドレス"

3. 次に、「ツール」>「参照設定」をクリックします。「参照設定 – VBAProject」ダイアログボックスで、「Microsoft Outlook 16.0 Object Library」のチェックボックスを探してチェックし、「OK」ボタンをクリックして変更を保存します。

A screenshot of the 'References – VBAProject' dialog box in Excel with the Microsoft Outlook 16.0 Object Library option selected

4. 「F5」キーを押してコードを実行すると、「参照」ウィンドウがポップアップ表示されます。メールに添付する必要のあるファイルを選択し、「OK」をクリックしてください。

A screenshot of the 'Browse' window for selecting files to attach to an email in Exce

その後、メッセージウィンドウがポップアップします。選択したファイルが「添付」フィールドに添付ファイルとして表示されていることが確認できます。

A screenshot of the Outlook message window with selected files displayed as attachments


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

注記:

1) 行の「To = xxx@aaa.com」において、「xxx@aaa.com」を実際の受信者のメールアドレスに置き換えてください。複数のメールアドレスが必要な場合は、セミコロンで区切ってください。
2) 行内の「.Subject = "kte features"」と「.Body = " Please check and read this document."」をそれぞれ変更して、メールの件名と本文を設定します。
3) 次の2行において:
.CC = "メールアドレス"
.BCC = "メールアドレス"
CCやBCCの受信者を追加したい場合は、行内の「"email address"」というテキストを必要なメールアドレスに置き換えてください。
cc および bcc の受信者が不要な場合は、各行の前にアポストロフィー ' を追加するだけです。

3. 「F5」キーを押してコードを実行すると、現在のワークシートがExcelワークブックとして保存され、メッセージウィンドウに自動的に挿入されて添付ファイルとなります。スクリーンショットをご覧ください:

A screenshot of the Outlook message window with the current worksheet saved and attached as an Excel workbook

注: 現在のワークシートのみを含む添付されたワークブックは、元のワークブックと同じ名前を持っています。また、コードを実行した時刻もワークブック名に追加されます。


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

注記:

1) 行 ".To = xxx@aaa.com" において、"xxx@aaa.com" を実際の受信者のメールアドレスに置き換えてください。複数のメールアドレスが必要な場合は、セミコロンで区切ってください。
2) 行内の「.Subject = "kte features"」と「.Body = " Please check and read this document."」をそれぞれ変更して、メールの件名と本文を設定します。
3) 次の2行において:
.CC = "メールアドレス"
.BCC = "メールアドレス"
CCやBCCの受信者を追加したい場合は、行内の「email address」というテキストを必要なメールアドレスに置き換えてください。
cc および bcc の受信者が不要な場合は、各行の前にアポストロフィ ' を追加するだけです。

3. 「F5」キーを押してコードを実行すると、現在のワークブックが自動的にメッセージウィンドウに添付ファイルとして挿入されます。スクリーンショットをご覧ください:

A screenshot of the Outlook message window with the current workbook attached automatically


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

注記:

1) 行 ".To = xxx@aaa.com" において、"xxx@aaa.com" を実際の受信者のメールアドレスに置き換えてください。複数のメールアドレスを指定する場合は、セミコロンで区切ってください。
2) 行内の .Subject = "test" と .Body = "test" をそれぞれ変更して、メールの件名と本文を設定します。
3) 次の2行において:
.CC = "メールアドレス"
.BCC = "メールアドレス"
CCやBCCの受信者を追加したい場合は、行内の「Email Address」というテキストを必要なメールアドレスに置き換えてください。
cc および bcc の受信者が不要な場合は、各行の前にアポストロフィ ' を追加するだけです。
4) PDFファイルの名前は元のワークブックと同じになります。また、コードを実行した時刻もワークブック名に追加されます。ファイル名にタイムスタンプを追加したくない場合は、次の行から & Format(Now, "dd-mmm-yy h-mm-ss") を削除してください。
FileName = 左揃え(Wb.Name, (InStrRev(Wb.Name, ".", -1, vbTextCompare) - 1)) & Format(Now, "dd-mmm-yy h-mm-ss") & ".pdf"

3. 「F5」キーを押してコードを実行します。すると、現在のワークブックが自動的に新しいメッセージウィンドウにPDFファイルの添付として挿入されます。スクリーンショットをご覧ください:

A screenshot of the Outlook message window with the current workbook attached as a PDF file


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

注記:

1) 行 「.To = xxx@aaa.com」 において、"xxx@aaa.com" を実際の受信者のメールアドレスに置き換えてください。複数のメールアドレスを指定する必要がある場合は、セミコロンで区切ってください。
2) 行内の .Subject = "test" と .Body = "test" をそれぞれ変更して、メールの件名と本文を設定します。
3) 次の2行において:
.CC = "メールアドレス"
.BCC = "メールアドレス"
CCやBCCの受信者を追加したい場合は、行内の「Email Address」というテキストを必要なメールアドレスに置き換えてください。
cc および bcc の受信者が不要な場合は、各行の前にアポストロフィ ' を追加するだけです。
4) PDFファイルの名前は次のようになります:元のワークブックの名前_元のワークシートの名前。この場合、PDFの名前は「Monthly sales_sales report」になります。

3. 「F5」キーを押してコードを実行します。すると、現在のワークシートが自動的に新しいメッセージウィンドウにPDFファイルの添付として挿入されます。スクリーンショットをご覧ください:

A screenshot of the Outlook message window with the current worksheet attached as a PDF file


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を次のように変更する必要があります。

1) ".Body" の行を "VBA code 1" に置き換えます。
2) 「.Display」の行を「With OutlookMail (または他のコードでは With xMailOut)」の行の下に移動します。スクリーンショットをご覧ください:

A screenshot showing the modified VBA code with the .Body line replaced and .Display placed under With OutlookMail

以下は、修正後の完全なコードです。

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のデフォルト署名がメール本文の最後に自動的に挿入されます。

A screenshot of an email in Outlook with the default signature automatically inserted at the end of the email body


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

注記:

1) 「D6」は、その値に基づいてメールを送信するセルです。
2) "> 10000" は条件を表しており、D6 の値が 10000 より大きい場合にメールが送信されることを意味します。
3) 次の行の "Range(“D6”)\
xMailBody = "Hi boss" & vbNewLine & vbNewLine & _
"Total sales of over $10,000 in January: " & Range("D6")
4) 行「.To = xxx@aaa.com」において、「xxx@aaa.com」を実際の受信者のメールアドレスに置き換えてください。複数のメールアドレスが必要な場合は、セミコロンで区切ってください。
5) .Subject = "test" の行でメールの件名を変更します。
6) 次の2行において:
.CC = "メールアドレス"
.BCC = "メールアドレス"
CCやBCCの受信者を追加したい場合は、行内の「Email Address」というテキストを必要なメールアドレスに置き換えてください。
cc および bcc の受信者が不要な場合は、各行の前にアポストロフィ ' を追加するだけです。

今後、セル D6 の値が 10000 を超えた場合、以下のスクリーンショットに示すように、メールが作成されます。

A screenshot of an email created in Outlook when the value in cell D6 exceeds 10000 in Excel


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

注: コード内では

1) コード内の「B14」は、セル B14 の値が変更されたときにメールを送信することを意味します。
2) 行 「.To = xxx@aaa.com」 において、"xxx@aaa.com" を実際の受信者のメールアドレスに置き換えてください。複数のメールアドレスが必要な場合は、セミコロンで区切ってください。
3) .Subject = "Worksheet modified" の行でメールの件名を変更します。
4) 次の2行において:
.CC = "メールアドレス"
.BCC = "メールアドレス"
CCやBCCの受信者を追加したい場合は、行内の「Email Address」というテキストを必要なメールアドレスに置き換えてください。
ccやbccの受信者を必要としない場合は、各行の前にアポストロフィー ' を追加するだけです。

これから、セル B14 の値が変更されるたびに、以下のスクリーンショットに示すように、Outlook のメッセージが自動的に作成されます。

A screenshot of an email created in Outlook when the value in cell B14 changes


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

注: コード内では

1) 行 ".To = xxx@aaa.com" において、"xxx@aaa.com" を実際の受信者のメールアドレスに置き換えてください。複数のメールアドレスを指定する場合は、セミコロンで区切ってください。
2) 行 「.Subject = "The workbook has been updated"」 と 「.Body = "Hi," & Chr(13) & Chr(13) & "File is now updated."」 で、それぞれメールの件名と本文を変更します。
3) 次の2行において:
.CC = "メールアドレス"
.BCC = "メールアドレス"
CCやBCCの受信者を追加したい場合は、行内の「Email Address」というテキストを必要なメールアドレスに置き換えてください。
cc および bcc の受信者が不要な場合は、各行の前にアポストロフィ ' を追加するだけです。

3. 今後、ワークブックを保存する際に「Ctrl」+「S」キーを押すか、「保存」ボタンをクリックすると、Outlookのメールが自動的に作成されます。現在のワークブックが添付ファイルとして添付され、フィールドには指定された内容が入力されていることが確認できます。スクリーンショットをご覧ください:

A screenshot showing an Outlook email with the current workbook attached, ready to be sent automatically

ヒント:このワークブックを頻繁に使用する場合、VBAスクリプトを将来の使用のために保存するために、ワークブックを「Excelマクロ有効ワークブック」として保存することをお勧めします。手順は次のとおりです。

1) 「ファイル」>「名前を付けて保存」をクリックし、ファイルを保存するフォルダを選択します。
2) 「名前を付けて保存」ダイアログボックスで、必要なファイル名を「ファイル名」テキストボックスに入力し、「保存形式」ドロップダウンリストから「Excel マクロ有効ワークブック」を選択し、最後に「保存」ボタンをクリックします。スクリーンショットをご覧ください:

A screenshot of the 'Save As' dialog in Excel showing the option to save the workbook as an Excel Macro-Enabled Workbook


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 (コード)] ウィンドウに貼り付けます。

A screenshot showing the VBA code editor with the 'Workbook_Open' event and 'Application.OnTime' function to schedule email sending

VBAコード2:特定の時間に自動的にメールを送信する

Private Sub Workbook_Open()
    Application.OnTime TimeValue("09:00:00"), "Timer"
End Sub

注記:

1) VBAコード1では、次の行の「Friday」は、メールが毎週金曜日に自動的に送信されることを意味します。
もし Weekday(Date) = vbFriday ならば
2) VBAコード1およびVBAコード2では、時刻「09:00:00」は特定の日の午前9時にメールが送信されることを意味します。
必要に応じて、日付と時間を変更できます。
3) コードが実行されると、メールが作成されます。メッセージウィンドウをポップアップ表示したくなく、直接送信したい場合は、VBAコード1から「.Display」の行を削除し、「.Send」の前の「アポストロフィ」を削除してください。

4. コードを保存し、その後、次のようにしてワークブックをExcelのマクロ有効ワークブックとして保存します。

4.1) 「ファイル」>「名前を付けて保存」をクリックし、ファイルを保存するフォルダを選択します。
4.2) 「名前を付けて保存」ダイアログボックスで、「ファイル名」テキストボックスに必要な名前を入力し、「保存形式」ドロップダウンリストから「Excel マクロ有効ワークブック」を選択し、最後に「保存」ボタンをクリックします。スクリーンショットをご覧ください:

A screenshot of the 'Save As' dialog in Excel showing the option to save the workbook as an Excel Macro-Enabled Workbook

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

注: コード内では

1) 行 ".To = xxx@aaa.com" において、"xxx@aaa.com" を実際の受信者のメールアドレスに置き換えてください。複数のメールアドレスが必要な場合は、セミコロンで区切ってください。
2) 次の2行において:
.CC = "メールアドレス"
.BCC = "メールアドレス"
CCやBCCの受信者を追加したい場合は、行内の「Email Address」というテキストを必要なメールアドレスに置き換えてください。
ccやbccの受信者を必要としない場合は、各行の前にアポストロフィー ' を追加するだけです。

4. 「F5」キーを押してコードを実行します。「Kutools for Excel」ダイアログボックスが表示されたら、メール本文の一部として送信する必要があるセルの範囲を選択し、「OK」をクリックします。スクリーンショットをご覧ください:

A screenshot of the Kutools for Excel dialog box where a range of cells is selected to send as part of an email body

その後、Outlookのメールが自動的に作成されます。ワークシートで選択した範囲がメール本文に挿入されていることが確認できます。スクリーンショットをご覧ください:

A screenshot of an Outlook email with the selected range from Excel inserted into the email body


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

注記:

1) 「.To = xxx@aaa.com」という行では、「xxx@aaa.com」を実際の受信者のメールアドレスに置き換えてください。複数のメールアドレスが必要な場合は、セミコロンで区切ってください。
2) 行内の「.Subject = "2021年の月次売上"」と「.Body = "こんにちは、このドキュメントを確認して読んでください。"」で、メールの件名と本文をそれぞれ変更します。
3) 次の2行において:
.CC = "メールアドレス"
.BCC = "メールアドレス"
CCやBCCの受信者を追加したい場合は、行内の「email address」というテキストを必要なメールアドレスに置き換えてください。
cc および bcc の受信者が不要な場合は、各行の前にアポストロフィ ' を追加するだけです。

3. 「F5」キーを押してコードを実行します。表示される「Kutools for Excel」ダイアログボックスで、メールの添付ファイルとして送信するセルの範囲を選択し、「OK」をクリックします。スクリーンショットをご覧ください:

A screenshot of the Kutools for Excel dialog box where a range of cells is selected to send as an attachment in an email

その後、Outlookのメールが自動的に作成されます。そして、ワークシートで選択したセルの範囲はExcelワークブックとして保存され、メッセージウィンドウに添付されます。スクリーンショットをご覧ください:

A screenshot of an Outlook email with the selected range from Excel saved as an attachment


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

A screenshot of the Microsoft Visual Basic for Applications window showing the CommandButton1_Click code

6. コマンドボタンのサブプロシージャ内に既存のマクロの名前を入力します。

A screenshot of editing the VBA code to assign an existing macro to the command button

7. 「Alt」キーと「Q」キーを押して「Visual Basic Editor」を閉じ、[開発] タブの [デザインモード] をクリックしてデザインモードをオフにします。

A screenshot of turning off Design Mode in the Developer tab

これで、現在のワークブックを添付ファイルとして含むメールを送信するためのコマンドボタンをクリックできます。


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コードの使用方法は?

1) 自分のコードでは、「Dim OutlookMail As Object」という行をVBAコード1に置き換える必要があります。
2) コード内の「On Error Resume Next」の行の下にVBAコード2を追加します。その後、VBAコード2でメールを送信するために使用するメールアドレスを指定します。

この例では、特定のメールアカウントを指定して、現在のワークブックをExcelから添付ファイルとして送信します。以下の手順に従ってください。

1. 「Alt」キーと「F11」キーを押します。「Microsoft Visual Basic for Applications」ウィンドウで、「ツール」>「参照設定」をクリックします。その後、「References – VBAProject」ダイアログボックスで「Microsoft Outlook 16.0 Object Library」のチェックボックスをオンにして「OK」をクリックします。

A screenshot of the 'References – VBAProject' dialog box in Excel with the Microsoft Outlook 16.0 Object Library option selected

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

注: コード内では

1) 以下の行において、「E2:E7」にはメールを送信する基準となる期日が含まれています。「C2:C7」にはメールを送信する宛先のメールアドレスが含まれており、「D2:D7」にはプロジェクトの期限が近づいていることを受信者に通知するためにメール本文に追加する注釈が含まれています。必要に応じて範囲を変更できます。
xRgDate = Range("E2:E7") に設定
xRgSend = Range("C2:C7") に設定
Set xRgText = 範囲("D2:D7")
2) 次の行は、締め切りが今日から1日より後で、7日以内(7日を含む)である必要があることを意味します。必要に応じて変更できます。
もし CDate(xRgDateVal) - Date <= 7 かつ CDate(xRgDateVal) - Date > 0 ならば
3) 行 ".To = xxx@aaa.com" において、"xxx@aaa.com" を実際の受信者のメールアドレスに置き換えてください。複数のメールアドレスを指定する必要がある場合は、セミコロンで区切ってください。
4) 「.Subject = "Worksheet modified"」の行でメールの件名を変更します。
5) 次の2行において:
.CC = "メールアドレス"
.BCC = "メールアドレス"
CCやBCCの受信者を追加したい場合は、行内の「Email Address」というテキストを必要なメールアドレスに置き換えてください。
cc および bcc の受信者が不要な場合は、各行の前にアポストロフィ ' を追加するだけです。

3. 「F5」キーを押してコードを実行します。その後、有効期限が条件に一致する場合、対応するメールが作成されます。この場合、以下のスクリーンショットに示すように、2通のメールが作成されます。

A screenshot of two emails created automatically based on expiration date matching conditions in Excel


5. Excelから簡単にメールを送信するための便利なツール

VBAの初心者の方にとって、上記の方法は扱いにくい場合があります。そこで、「Kutools for Excel」の「Send Emails」機能をおすすめします。この機能を使えば、数回のクリックだけでExcelから簡単にメールを送信できます。以下のように操作してください。

Kutools for Excelは、300以上の高度な機能を提供し、複雑なタスクを簡素化し、創造性と効率を向上させます。 AI機能と統合され、Kutoolsは正確にタスクを自動化し、データ管理を容易にします。Kutools for Excelの詳細情報...無料トライアル...
 5.1 メールに必要なフィールドを含むメーリングリストを簡単に作成できます。

メール送信機能を適用する前に、必要なメールフィールドを含むメーリングリストを作成する必要があります。ここで、メーリングリストの作成機能が役立ちます。

1. 「Kutools Plus」をクリックし、続いて「メーリングリストの作成」を選択します。

2. 開いた「メーリングリストの作成」ウィンドウで、次の設定を行う必要があります。

2.1) 「メーリングリストに含める列」セクションで、メールに必要なフィールドをチェックしてください。
2.2) 「添付ファイル」セクションで、必要な添付ファイルを1つ以上チェックしてください。
2.3) メーリングリストの配置場所を指定します。
2.4) 「作成」ボタンをクリックします。スクリーンショットをご覧ください:

その後、以下のスクリーンショットに示すように、サンプルのメーリングリスト表が作成されます。

3. ここで、サンプル内の元のデータを自分のフィールドデータに置き換える必要があります。

これでメーリングリストの表が作成されました。作成したフィールドに基づいてExcelからメールを送信するために、「メールを送信」機能を適用してください。

Kutools for Excel - 必要なツールを300以上搭載し、Excelの機能を大幅に強化します。永久に無料で利用できるAI機能もお楽しみください!今すぐ入手


 5.2 メーリングリストで作成したフィールドを含むメールを簡単に送信できます。

メールに必要なフィールドを含むメーリングリスト(クリックして作成方法を確認)を作成後、これらのフィールドを使用してExcelからメールを送信できるようになります。

1. メーリングリスト全体を選択し、"Kutools Plus" > "Send Emails" をクリックします。

2. 「メールを送信」ダイアログボックスで、次の設定を行ってください。

2.1) メーリングリストで指定したフィールドによって、各フィールドのダイアログボックスに自動的にフィールドが入力されます。
ヒント: 現在特定のフィールドが必要ない場合は、ドロップダウンリストで空白のオプションを選択してください。
2.2)「プレースホルダーを挿入」(オプション):メール本文に可変情報を挿入する必要がある場合。
例えば、複数の受信者に個別の名前を含むメールを送信する必要がある場合、メール本文でプレースホルダーを挿入したい場所にカーソルを置き、「E: 名」(またはメールリスト内の他の名前フィールド)を選択してから、「プレースホルダーを挿入」ボタンをクリックします。
受信者がメールを受信すると、メール本文は同じままですが、名前はそれぞれ固有のものになります。
2.3) 必要に応じてメール本文を作成します。
2.4) 「Send emails via Outlook」のボックスがチェックされていることを確認してください;
2.5) 「送信」ボタンをクリックします。スクリーンショットをご覧ください:

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%向上させ、毎日数百回のマウスクリックを減らします!