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