Excel VBA(マクロ)

Excelマクロ(VBA)メール送信 Outlook不要

wp-datacare

今回はOutlookを使わずに、Excelだけでメールを送信する方法を解説します。

Excelからメール送信ができると、Excelを使った業務範囲が格段に広がります。
簡単に使えるサンプルファイルは以下よりダウンロードできます。
添付ファイルも送信できます。


ダウンロードしたファイルのシート「メール設定」を送信元の情報に変更して下さい。

Outlookのメール設定の場合、以下の情報になります。参考にして下さい。

シート「メール送信」の宛先を変更して下さい。
添付ファイルがない場合は、パスを消して下さい。
添付する場合は、[参照]ボタンを押して自分のパソコンのファイルを選択して下さい。

セルにある文字や数値の値をメールで送る場合は、ダウンロードしたファイルの
  セルにある値を加工してメール送信.xlsm
を参考にして下さい。

Excelからメールを送信するので、セルの値を使ってメール送信を行いたいと思います。
その場合数式を使い値を加工して件名や本文を作成します。
以下のように行います。

 数値を桁区切りにする場合 TEXT関数
     → TEXT(H6,”#,##0″)
 日付を 2025年7月16日(水) のように表示させる場合も TEXT関数
     → TEXT(G4,”yyyy年m月d日(aaa)”)
 改行をする場合は改行コード CHAR(10)
 これらを 文字の結合 &(アンド)を使って本文を完成させます。
セルの数値や日付を変更すると、本文も自動的に変わりますので使い勝手がよいです。

以下のようになります。詳細はダウンロードしたファイルを参考にして下さい。

送信先のメールアドレスが存在しない場合や、受信者のメールボックスが容量オーバーの場合など、送信エラーが発生すると、エラーメールが送信元のアドレスに届きます。
そのため、メールが正常に送信されたかを確認するには、送信元のメールアドレスをメーラーに設定するか、サーバー側で送信エラーを管理者に転送するなどの対応が必要です。

メール送信だけの Function は以下よりコピーしてご使用下さい。
コメントの★印は、サーバ情報に書き換えて下さい。

Function Send_mail(ByVal arrMailTo As Variant, strSubject As String, strBody As String, ByVal arrAttachment As Variant) As Boolean
    '★ の部分はお使いのメールサーバ情報に変更して下さい

    'メールが正常送信の場合 True、送信できなかった場合 False を返す
    '宛先は、一次元配列でセット
    '添付ファイルは、一次元配列でセット
    

    On Error GoTo err_Handler
    
    Dim objMessage As Object
    Dim objEmailConfig As Object
    Dim objEmailFields As Variant
    Dim recipient As String
    Dim i As Long
    
    ' 宛先アドレスの結合
    If IsArray(arrMailTo) Then
        For i = 0 To UBound(arrMailTo)
            If recipient = "" Then
                recipient = arrMailTo(i)
            Else
                recipient = recipient & ";" & arrMailTo(i)
            End If
        Next i
    End If
    
    ' メールオブジェクトの作成
    Set objMessage = CreateObject("CDO.Message")
    Set objEmailConfig = CreateObject("CDO.Configuration")
    Set objEmailFields = objEmailConfig.Fields
    
    ' SMTP構成の設定
    With objEmailFields
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 '変更の必要なし
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.example.com" '★SMTPサーバーアドレス
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465 '★ポート番号 通常は右のどれか 587 465 25 2525
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 '変更の必要なし
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "abc@example.com" '★ユーザ名
        .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "abc1234" '★パスワード
        .Item("http://schemas.microsoft.com/cdo/configuration/sendcharset") = "UTF-8" '変更の必要なし
        .Update
    End With
    
    ' メール内容の設定
    With objMessage
        Set .Configuration = objEmailConfig
        .To = recipient
        .From = "abc@example.com" '★送信元メールアドレス
        .Subject = strSubject
        .TextBody = strBody
        
        If IsArray(arrAttachment) Then
            For i = 0 To UBound(arrAttachment)
                .AddAttachment arrAttachment(i)
            Next i
        End If
        
        .Fields.Update
        .Send
    End With

    ' 正常終了
    Send_mail = True
    GoTo Cleanup

err_Handler:
    Send_mail = False

Cleanup:
    Set objMessage = Nothing
    Set objEmailConfig = Nothing
    Set objEmailFields = Nothing
    
End Function

記事URLをコピーしました