#030

Sdílet
Vložit
  • čas přidán 28. 02. 2024
  • OutLookメールを自動作成して大量のリストを自動送信したり、Excelの書式を有効にしたりする方法を詳しく説明しています。
    ■再生リスト
    • Excelパワークエリ
    • Excelマクロ(VBA)
    • Excel関数
    • Excelピボットテーブル
    ▼動画で説明しているサンプルコード、コピペ活用ください。
    Sub マクロ10_1()
    ' OutLookのメールを自動作成する
    ' Outlookオブジェクトの変数宣言
    Dim myoutlook As Outlook.Application
    Set myoutlook = New Outlook.Application
    ' メール送信用のオブジェクト作成
    Dim mymail As Outlook.MailItem
    Set mymail = myoutlook.CreateItem(olMailItem)
    ' メール送信内容の作成
    With mymail
    .To = Range("C3").Value 'TO宛先
    .CC = Range("C4").Value 'CC宛先
    .BCC = Range("C5").Value 'BCC宛先
    .Subject = Range("C6").Value '件名
    .Body = Range("C7").Value 'メール本文
    .BodyFormat = olFormatHTML '形式の設定(テキスト:Plain、HTML:HTML)
    .Display 'メールを表示
    End With
    End Sub
    -----------------------------
    Sub マクロ10_2()
    ' 本文の書式をExcelからそのまま利用しOutLookの署名を有効にする
    ' Outlookオブジェクトの変数宣言
    Dim myoutlook As Outlook.Application
    Set myoutlook = New Outlook.Application
    ' メール送信用のオブジェクト作成
    Dim mymail As Outlook.MailItem
    Set mymail = myoutlook.CreateItem(olMailItem)
    ' 添付ファイルの最終行取得
    Dim maxRow As Long
    maxRow = Cells(Rows.Count, 3).End(xlUp).Row
    ' 添付ファイル行数処理を実施
    Dim i As Long
    ' メール送信内容の作成
    With mymail
    .To = Range("C3").Value 'TO宛先
    .CC = Range("C4").Value 'CC宛先
    .BCC = Range("C5").Value 'BCC宛先
    .Subject = Range("C6").Value '件名
    .BodyFormat = olFormatHTML '形式の設定(テキスト:Plain、HTML:HTML)
    'Excelの本文を書式のままコピー
    Range("C7").Copy '本文をコピー
    Set xlform = .GetInspector.WordEditor.Range(0, 0) 'メールアイテムをWordEditor経由で編集
    xlform.PasteExcelTable False, False, False '予定表本文へExcelの書式付で貼り付け
    'ファイルを添付
    For i = 8 To maxRow '8行目から最終行までのファイルを対象
    If Range("C8").Value <> "" Then 'C8が空白以外の場合
    .Attachments.Add Cells(i, "C").Value + Cells(i, "D").Value 'ファイルを添付
    End If
    Next i
    .Display 'メールを表示
    End With
    Application.CutCopyMode = False 'コピーモード終了
    End Sub
    -----------------------------
    Sub マクロ10_3()
    ' 複数のメールを一括送信したい
    On Error GoTo error 'エラー発生時errorまで飛ぶ
    ' 添付ファイルの最終行取得
    Dim maxRow As Long
    maxRow = Cells(Rows.Count, "G").End(xlUp).Row
    ' 添付ファイル行数処理を実施
    Dim i As Long
    For i = 3 To maxRow '3行目から最終行までのファイルを対象
    ' Outlookオブジェクトの変数宣言
    Dim myoutlook As Outlook.Application
    Set myoutlook = New Outlook.Application
    ' メール送信用のオブジェクト作成
    Dim mymail As Outlook.MailItem
    Set mymail = myoutlook.CreateItem(olMailItem)
    ' 以降P列に”送信”と表示されているものだけ処理を進める
    If Cells(i, "P") <> "" Then
    ' メール送信内容の作成
    With mymail
    .To = Cells(i, "G").Value 'TO宛先
    .CC = Cells(i, "H").Value 'CC宛先
    .BCC = Cells(i, "I").Value 'BCC宛先
    .Subject = Cells(i, "J").Value '件名
    .BodyFormat = olFormatHTML '形式の設定(テキスト:Plain、HTML:HTML)
    ' Excelの本文を書式のままコピー
    Cells(i, "K").Copy '本文をコピー
    Set xlform = .GetInspector.WordEditor.Range(0, 0) 'メールアイテムをWordEditor経由で編集
    xlform.PasteExcelTable False, False, False '予定表本文へExcelの書式付で貼り付け
    'ファイルを添付
    If Cells(i, "L").Value <> "" Then 'L列が空白以外の場合
    .Attachments.Add Cells(i, "L").Value + Cells(i, "M").Value 'ファイル①を添付
    End If
    If Cells(i, "N").Value <> "" Then 'N列が空白以外の場合
    .Attachments.Add Cells(i, "N").Value + Cells(i, "O").Value 'ファイル②を添付
    End If
    End With
    mymail.Display 'メールを表示
    ' mymail.Send 'メールを送信 ←有効にしたい場合は(’)を外してコード化
    End If
    Next i
    Application.CutCopyMode = False 'コピーモード終了
    Exit Sub 'エラーが無い場合ここまで処理を進めて抜ける
    error:
    Application.StatusBar = False
    MsgBox "エラーが発生しました エラー番号=" & Err.Number & vbCrLf & _
    "【原因が分からない場合は、管理者に連絡してください】" & vbCrLf & _
    "エラーの内容は「" & Err.Description & "」です。", vbCritical
    Application.CutCopyMode = False 'コピーモード終了
    End Sub

Komentáře • 10

  • @pyua5white
    @pyua5white Před 2 měsíci

    10-2リストからプルダウン参照はvlookupですか?

    • @user-ps6es4yd6c
      @user-ps6es4yd6c  Před 2 měsíci

      ご視聴ありがとうございます!
      VLOOKUPやXLOOKUPで大丈夫です。
      動画は、VBAでXLOOKUPを使用してますのでセル事態に関数は入力されてません。
      #031の動画のやり方でプルダウンでC2セル変更時に起動させてます。

  • @user-oh3fs3fv7t
    @user-oh3fs3fv7t Před 11 dny

    とても分かりやすくて助かります。
    宛先が複数人の場合はエクセルのフォーマット内でセル結合したり、セル内改行して作成していましたが、メール送信画面になると、アドレスが横一列にならずにエクセルフォーマットで作成したように縦一列に並んで表示されます。
    これはこのまま送信してもちゃんと複数人に届くのでしょうか。
    また、複数の範囲に分けて送信しよう(宛先アドレスにA1とA2を指定)とも思いましたが、.TO =RANGE("A1:A2").VALUE にしてもエラーが出てしまいました。
    2つについて解決策等あれば教えていただきたいです。

    • @user-ps6es4yd6c
      @user-ps6es4yd6c  Před 10 dny

      ご視聴いただきありがとうございます!
      ご質問にご回答いたします。
      ①送信されないと思います
      セル内のアドレスがハイパーリンクになっていれば同一セル内改行で横一列になります。また、ハイパーリンクではないテキスト状態でも、メールアドレスの間にセミコロン(;)を入れておけば大丈夫です。
      ②セルを繋げたい場合は以下の例を参考としてください。
      To = Range("A1") & ";" & Range("A2").Value

    • @user-oh3fs3fv7t
      @user-oh3fs3fv7t Před 9 dny

      @@user-ps6es4yd6c
      ありがとうございます!
      教えていただいた方法を試したところうまくできました!

    • @user-oh3fs3fv7t
      @user-oh3fs3fv7t Před 9 dny

      @@user-ps6es4yd6c
      もう一点質問があるのですが、よろしいでしょうか。。
      動画で紹介のあったように
      本文をエクセル内に書き込み指定して、送信しようと考えています。
      そこで、本文の日付などの変動する部分を(日付)と入力し、outlookで送信する際にリプレイスで置き換えたいと考えています。
      しかし、Replace関数を使っているのにoutlookでは置換されていないのですが、なぜだかお分かりでしょうか?
      以下を動画のコードにプラスしています。
      Body = replace(Body,”「日付」”,range(“A1”).value)

    • @user-ps6es4yd6c
      @user-ps6es4yd6c  Před 9 dny

      例えば本文がセルA7に入力されていて、日付をA1の内容に置き換えたい場合は以下のようになります。
      .Body = Replace(Range("A7"), "「日付」", Range("A1"))
      また、当チャンネルのExcel関数に関する#110を見ていただくと、VBAで書き換える場合だけでなく、ゼル内の日付を制御する方法も載せておりますので参考にしてください。

    • @user-oh3fs3fv7t
      @user-oh3fs3fv7t Před 9 dny

      @@user-ps6es4yd6c
      ありがとうございます。
      試したところ置換できはしたのですが、1つのときのみできている状況です。
      セル内の本文に置換したい言葉が3つあり、それをいただいた式で試しても最後の3つ目のみが置換され、1つ目と2つ目のものは置換前のままでメールが作成されます。
      どうすればいいのでしょうか?