非プログラマーでもできる!業務の自動化

【コピペで使える】メールアドレスから会社名と個人名を自動で本文に入力する|OutlookVBAマクロ自動化

当ページのリンクの一部に広告が含まれています。

この記事の要約

  • 課題・悩み「メールで会社名な名前を入力するのが面倒」
  • 解決策「Outlookのメールのアドレスから本文に宛先を自動入力するVBAマクロ」を解説

メールを作成する際に、いちいち宛先を入力するのは面倒。

「前株?あと株?」「どのサイトウさんだっけ?」

そこで、メールのTOに入力されたアドレスから自動で宛先を入力するVBAマクロを作成しました。

コピペで使えます。

この記事では

【Outlookのメールのアドレスから本文に宛先を自動入力するVBAマクロのコード】を解説しています。

目次

Toに入力されているメールアドレスから会社名と名前を自動で本文に挿入するVBAマクロ

メールアドレスを作成する際に会社名や名前といった宛先を入力するのが面倒。

会社名の(株)は前株?後株?
サイトウさんの漢字どれだっけ?

そこで【Toに入力しているメールアドレスから自動で会社名と名前を本文に入力するVBAマクロ】を作成しました。

設定したマクロをワンクリックするだけで自動で本文に宛先が入力されます。

自動宛先入力マクロを使用するために必要な設定

自動宛先入力マクロを実施するために必要な設定は以下の通りです。

連絡先の登録

自動入力される情報は、Outlook の連絡先の【勤務先】と【姓】に設定しています。

そのため、事前に連絡先に相手の勤務先と名字を登録して置く必要があります。

マクロの登録

下記のVBAマクロのコードをコピーして、自分のパソコンのOutlookのVisual Basic Editorに入力します。

Sub 宛先の自動挿入()

    Dim objReItem As Outlook.MailItem
    Dim recipient As Outlook.recipient
    Dim strAddBody As String
    Dim recipientAddress As String
    Dim domainToCheck As String
    Dim myContactItem As Outlook.ContactItem
    Dim japaneseLastName As String
    Dim exUser As Outlook.ExchangeUser
    Dim objDOC As Object
    Dim rng As Object
    Dim docEnd As Long

    ' 特定のドメインを設定
    domainToCheck = "@example.com" ' ここを一般的なドメインに置き換えます。

    ' 現在表示中のメールアイテムを取得
    Set objReItem = ActiveInspector.CurrentItem
    Set recipient = objReItem.Recipients.Item(1)

    ' ExchangeUserオブジェクトを取得
    On Error Resume Next
    Set exUser = recipient.AddressEntry.GetExchangeUser
    On Error GoTo 0

    ' Eメールアドレスを取得
    If Not exUser Is Nothing Then
        recipientAddress = exUser.PrimarySmtpAddress
    Else
        recipientAddress = recipient.Address
    End If

    ' ドメインに基づいて処理を分岐
    If InStr(recipientAddress, domainToCheck) > 0 Then
        ' recipient.Nameから名字を取得(" 名前" の部分を削除)
        japaneseLastName = Split(recipient.Name, " ")(0)
        strAddBody = japaneseLastName & "さん" & vbCrLf & vbCrLf & "お世話になっております。" & vbCrLf
    Else
        On Error Resume Next
        Set myContactItem = recipient.AddressEntry.GetContact
        On Error GoTo 0

        If Not myContactItem Is Nothing Then
            With myContactItem
                strAddBody = .CompanyName & vbCrLf & .Department & " " & .LastName & " 様" & vbCrLf & vbCrLf & "いつもお世話になっております。" & vbCrLf
            End With
        Else
            MsgBox "宛先の連絡先を取得できませんでした。", vbExclamation
            Exit Sub
        End If
    End If

    ' WordEditorオブジェクトを取得
    Set objDOC = objReItem.GetInspector.WordEditor

    ' 挨拶文を本文の先頭に追加
    Set rng = objDOC.Range(0, 0)
    rng.InsertBefore strAddBody

    ' ドキュメントの末尾の位置を取得
    docEnd = objDOC.Content.End
    
    ' 挿入した挨拶文の範囲にフォントを設定
    Set rng = objDOC.Range(0, docEnd)
    rng.Font.Name = "Yu Gothic"
    rng.Font.Size = 11

    ' メールを表示
    objReItem.Display

    ' 使用したオブジェクトの解放
    Set myContactItem = Nothing
    Set recipient = Nothing
    Set objReItem = Nothing
    Set exUser = Nothing
    Set objDOC = Nothing
    Set rng = Nothing

End Sub

クイックアクセスツールバーまたはリボンへのマクロの登録

登録したマクロを素早く実行するには、クイックアクセスツールバーまたはリボンへ登録するのがおすすめです。

メールのアドレスから宛先を本文に自動入力するVBAマクロを使うための準備

【メールのアドレスから宛先を本文に自動入力するVBAマクロ】を使うためには、アドレスを連絡先に登録する必要があります。

自動入力したいアドレスを連絡先に登録する

アドレスを連絡先に保存する方法は以下の通りです。

受信トレイで、連絡先に登録したいメールを開きます。

 

メールの上部にある送信者の名前をクリックします。

 

Outlookのメールのアドレスから本文に宛先を自動入力するVBAマクロの画像

【…】をクリックします。

Outlookのメールのアドレスから本文に宛先を自動入力するVBAマクロの画像

【連絡先フォルダに追加】をクリックします。

Outlookのメールのアドレスから本文に宛先を自動入力するVBAマクロの画像

【勤務先】に会社名を【姓】に名字を入力します。

連絡先の【勤務地】と【姓】に入力した情報が自動宛先として、メール本文に挿入されます。

Outlookのメールのアドレスから本文に宛先を自動入力するVBAマクロの画像

【保存して閉じる】をクリックします。

 

メールのアドレスから宛先を本文に自動入力するVBAマクロのコード_社内社外で条件分岐

私の会社では、OutlookがExchangeで管理されているため、【勤務先】と【姓】を連絡先に登録してもメールの宛先として取得することができませんでした。

そのため、社内のアドレスの宛先はExchangeで管理されている【表示名】から取得し、社外のアドレスの宛先は連絡先に自分で登録した【勤務先】と【姓】から取得するようにしました。

メールのアドレスから宛先を本文に自動入力するVBAマクロのコード_社内社外で条件分岐

  • 社内のアドレス…【@社内のアドレス】
  • 社外のアドレス…【@社内のアドレス】以外

このVBAマクロは、Microsoft Outlookで選択されたメールアイテムに対して特定の条件に基づき宛名を挿入する自動化スクリプトです。

Sub 指定宛先に挨拶文を挿入するALL()

    Dim objReItem As Outlook.MailItem
    Dim recipient As Outlook.recipient
    Dim strAddBody As String
    Dim recipientAddress As String
    Dim domainToCheck As String
    Dim myContactItem As Outlook.contactItem
    Dim japaneseLastName As String
    Dim exUser As Outlook.exchangeUser
    Dim objDOC As Object
    Dim objWord As Word.Application
    Dim objSel As Word.Selection

    ' 特定のドメインを設定
    domainToCheck = "@example.com" ' ここを一般的なドメインに置き換えます。

    ' 現在表示中のメールアイテムを取得
    Set objReItem = ActiveInspector.CurrentItem
    Set recipient = objReItem.Recipients.Item(1)

    ' ExchangeUserオブジェクトを取得
    On Error Resume Next
    Set exUser = recipient.AddressEntry.GetExchangeUser
    On Error GoTo 0

    ' Eメールアドレスを取得
    If Not exUser Is Nothing Then
        recipientAddress = exUser.PrimarySmtpAddress
    Else
        recipientAddress = recipient.Address
    End If

    ' ドメインに基づいて処理を分岐
    If InStr(recipientAddress, domainToCheck) > 0 Then
        ' recipient.Nameから名字を取得(" 名前" の部分を削除)
        japaneseLastName = Split(recipient.Name, " ")(0)
        strAddBody = japaneseLastName & "さん" & vbCrLf & vbCrLf & "お世話になっております。" & vbCrLf
    Else
        On Error Resume Next
        Set myContactItem = recipient.AddressEntry.GetContact
        On Error GoTo 0

        If Not myContactItem Is Nothing Then
            With myContactItem
                strAddBody = .CompanyName & vbCrLf & .Department & " " & .lastName & " 様" & vbCrLf & vbCrLf & "いつもお世話になっております。" & vbCrLf
            End With
        Else
            MsgBox "宛先の連絡先を取得できませんでした。", vbExclamation
            Exit Sub
        End If
    End If

    ' WordEditorオブジェクトを取得
    Set objDOC = objReItem.GetInspector.WordEditor
    Set objWord = objDOC.Application

    ' 挨拶文を本文の先頭に追加し、フォントを游ゴシックに設定
    objDOC.Range(0, 0).InsertBefore strAddBody
    objDOC.Range(0, Len(strAddBody)).Font.Name = "Yu Gothic"
    objDOC.Range(0, Len(strAddBody)).Font.Size = 11

    ' メールを表示
    objReItem.Display

    ' 使用したオブジェクトの解放
    Set myContactItem = Nothing
    Set recipient = Nothing
    Set objReItem = Nothing
    Set exUser = Nothing
    Set objDOC = Nothing
    Set objWord = Nothing
    Set objSel = Nothing

End Sub

ドメインにより入力を分岐させているのは、社内のアドレスがExchange環境で管理されており、自分で登録した連絡先を参照できないようになっていたからです。

そこで、社外は登録した【連絡先】の【勤務先】と【姓】のデータを、社内は【表示名】のデータを参照するようにコードを作成しています。

処理の概要

特定のドメイン設定

メールの受信者が特定のドメインに属しているかを判断する基準を設定します。

domainToCheck = "@example.com"

メールアイテムの取得

現在Outlookで開いているメールアイテムとその受信者情報を取得します。

Set objReItem = ActiveInspector.CurrentItem
Set recipient = objReItem.Recipients.Item(1)

受信者のメールアドレス取得

受信者のExchangeUserオブジェクトを取得し、そこからメールアドレスを抽出します。

Set exUser = recipient.AddressEntry.GetExchangeUser
recipientAddress = exUser.PrimarySmtpAddress

挨拶文のカスタマイズ

受信者の情報に基づいて適切な挨拶文を作成します。

特定のドメインに属する日本の受信者には名字を用い、それ以外の場合は連絡先情報を使用します。

If InStr(recipientAddress, domainToCheck) > 0 Then

挨拶文の挿入

Wordエディタを通じてメール本文の最初に挨拶文を挿入し、フォントを設定します。

objDOC.Range(0, 0).InsertBefore strAddBody

リソースの解放

使用したオブジェクトへの参照をクリアして、リソースを解放します。

Set myContactItem = Nothing

注意点

データ量

このマクロは、一度に1つのメールアイテムにのみ作用します。

複数のメールに対して同じ操作を行う場合は、メールごとに実行する必要があります。

データ量が多くないため、処理にかかる時間は通常は問題になりません。

実行の取り消し

VBAで実行した操作は、一般的に元に戻せません。

メールに挨拶文を挿入した後、それを取り消したい場合は手動で行う必要があります。

セキュリティ

マクロを実行するには、OutlookおよびWordのセキュリティ設定でマクロを許可する必要があります。

マクロの実行はセキュリティリスクを伴う場合があるため、信頼できるマクロのみを使用してください。

必要な環境設定

参照設定

このマクロを実行するには、VBAエディタ内で「Microsoft Outlook 16.0 Object Library」および「Microsoft Word 16.0 Object Library」への参照設定が必要です。

これらの設定は、VBAエディタのツールメニュー内の「参照設定…」から追加できます。

セキュリティ設定

OutlookおよびWordでマクロを許可する設定を確認し、必要に応じて調整してください。

セキュリティの警告が表示された場合は、マクロのソースが信頼できるものであることを確認してから実行してください。

参照設定

このマクロを実行するには、Outlookがインストールされていること、および “Microsoft Outlook 16.0 Object Library”(または使用しているOutlookのバージョンに応じたもの)への参照設定が追加されていることが必要です。

これはVBAエディタの「ツール」メニューの「参照設定」から行えます。

メールの編集には “Microsoft Word 16.0 Object Library” の参照設定も必要になることがあります。

これは、メール本文の編集にWordの機能を利用するためです。

カスタマイズ箇所

このコードをご自身の環境で使用するために変更が必要な部分について、以下にまとめました。

変更が必要な箇所は主に、特定のドメイン名、挨拶文の内容、およびフォントの設定です。

これらの変更を行うことで、コードを自分の環境や好みに合わせてカスタマイズすることができます。

ドメインの設定

メールの受信者が特定のドメインに属しているか判断するためのドメイン名。

自分の環境や目的に応じてこの値を適切なドメインに変更します。

domainToCheck = "@example.com"

ドメインの設定の注意点

自分が対応したい特定のドメインを正確に指定してください。

間違ったドメインを設定すると、意図した受信者に対して挨拶文が挿入されない可能性があります。

挨拶文のカスタマイズ

受信者に応じた挨拶文。

受信者の名前や所属に応じて挨拶文を変更したい場合、この部分を編集します。

特に、文化的な背景やビジネスシーンに合わせて挨拶文を調整することができます。

特定のドメインに属する受信者用:
strAddBody = japaneseLastName & "さん" & vbCrLf & vbCrLf & "お世話になっております。" & vbCrLf
その他の受信者用:
strAddBody = .CompanyName & vbCrLf & .Department & " " & .lastName & " 様" & vbCrLf & vbCrLf & "いつもお世話になっております。" & vbCrLf

挨拶文のカスタマイズの注意点

挨拶文は、受信者の文化やビジネス環境に適している必要があります。

不適切な挨拶文を使用すると、受信者に対して失礼にあたる場合があります。

フォント設定

メールの挨拶文に使用するフォントの種類とサイズ。

文書のフォーマットに合わせて、または個人の好みに応じてフォント名やサイズを変更します。

objDOC.Range(0, Len(strAddBody)).Font.Name = "Yu Gothic"
objDOC.Range(0, Len(strAddBody)).Font.Size = 11

フォント設定の注意点

選択するフォントは、メールを読む受信者のコンピューターにインストールされている必要があります。

一般的に使用されているフォントを選ぶか、あるいはメールの受信者が使用している環境を考慮してください。

メールのアドレスから宛先を本文に自動入力するVBAマクロのコード_連絡先から情報を取得

このVBAでは、受信者の連絡先情報から企業名と部署を用いて挨拶文を生成します。

Sub 挨拶文を挿入_連絡先基準()

    Dim objReItem As Outlook.MailItem
    Dim recipient As Outlook.Recipient
    Dim strAddBody As String
    Dim myContactItem As Outlook.ContactItem
    Dim objDOC As Object

    ' 現在表示中のメールアイテムを取得
    Set objReItem = ActiveInspector.CurrentItem
    Set recipient = objReItem.Recipients.Item(1)

    ' 連絡先情報を取得し、挨拶文を生成
    On Error Resume Next
    Set myContactItem = recipient.AddressEntry.GetContact
    If Not myContactItem Is Nothing Then
        With myContactItem
            strAddBody = .CompanyName & vbCrLf & .Department & " " & .LastName & " 様" & vbCrLf & vbCrLf & "いつもお世話になっております。" & vbCrLf
        End With
        
        ' WordEditorオブジェクトを取得し、挨拶文を本文の先頭に追加し、フォントを設定
        Set objDOC = objReItem.GetInspector.WordEditor
        objDOC.Range(0, 0).InsertBefore strAddBody
        objDOC.Range(0, Len(strAddBody)).Font.Name = "Yu Gothic"
        objDOC.Range(0, Len(strAddBody)).Font.Size = 11
        
        ' メールを表示
        objReItem.Display
    Else
        MsgBox "宛先の連絡先を取得できませんでした。", vbExclamation
    End If
    On Error GoTo 0

    ' 使用したオブジェクトの解放
    Set objReItem = Nothing
    Set recipient = Nothing
    Set myContactItem = Nothing
    Set objDOC = Nothing

End Sub

このVBAマクロは、Outlookで現在表示中のメールに対して、その宛先(受信者)の連絡先情報に基づいた挨拶文を自動で挿入する処理を行います。

そのため、事前に自動入力したい宛先を連絡先に登録して、会社名と名字を入力しておく必要があります。

処理ごとの解説

現在表示中のメールアイテムの取得

メールを作成または読んでいる際に開いているウィンドウ(インスペクター)から、現在操作しているメールアイテムを取得します。

Set objReItem = ActiveInspector.CurrentItem

宛先の取得

メールの宛先(受信者)のリストから最初の宛先を取得します。

Set recipient = objReItem.Recipients.Item(1)

連絡先情報の取得と挨拶文の生成

宛先の連絡先情報を取得し、その情報から挨拶文を組み立てます。

連絡先情報が取得できない場合は、エラーメッセージを表示します。

Set myContactItem = recipient.AddressEntry.GetContact とその後の If Not myContactItem Is Nothing Then ブロック

挨拶文の挿入とフォントの設定

取得したWordEditorオブジェクトを使用して、メール本文の先頭に挨拶文を挿入し、フォントの種類とサイズを設定します。

Set objDOC = objReItem.GetInspector.WordEditor とその後の処理

オブジェクトの解放

使用したオブジェクトをメモリから解放し、リソースをクリーンアップします。

最後の4行

注意点

処理時間

データが大量にある場合(例えば、受信者リストが非常に大きい場合)、処理に時間がかかることがあります。

これは、各受信者の連絡先情報を取得する際に、外部の連絡先データベースやアドレス帳にアクセスする必要があるためです。

バックアップしてから実行

VBAマクロで実行した操作は基本的に元に戻せません。

特にメールに対する変更は注意が必要です。

変更を加える前に、必要であればメールの内容をバックアップするなどの対策をとるとよいでしょう。

必要な環境設定

参照設定

このマクロを実行するには、Outlookがインストールされていること、および “Microsoft Outlook 16.0 Object Library”(または使用しているOutlookのバージョンに応じたもの)への参照設定が追加されていることが必要です。

これはVBAエディタの「ツール」メニューの「参照設定」から行えます。

メールの編集には “Microsoft Word 16.0 Object Library” の参照設定も必要になることがあります。

これは、メール本文の編集にWordの機能を利用するためです。

カスタマイズ箇所

このVBAマクロをご自身の環境で利用する際に変更する可能性がある箇所は主に挨拶文の内容やフォントの種類、サイズです。

これらは個人の好みや使用環境に合わせて調整することが推奨されます。

以下に、変更する可能性のある箇所とその解説をまとめた表を示します。

挨拶文の内容

挨拶文は受信者の連絡先情報に基づいて自動生成されますが、このメッセージは状況や好みに応じて変更可能です。

例えば、よりカジュアルな挨拶や、異なる言語での挨拶に変更したい場合などが考えられます。

strAddBody = .CompanyName & vbCrLf & .Department & " " & .LastName & " 様" & vbCrLf & vbCrLf & "いつもお世話になっております。" & vbCrLf

フォントの種類

挨拶文のフォントの種類は、「Yu Gothic」に設定されていますが、この設定はご自身が使用しているメールの標準フォントや好みのフォントに合わせて変更することができます。

objDOC.Range(0, Len(strAddBody)).Font.Name = "Yu Gothic"

フォントのサイズ

挨拶文のフォントサイズは11に設定されていますが、これも読みやすさや好みに応じて調整することが可能です。

objDOC.Range(0, Len(strAddBody)).Font.Size = 11

メールのアドレスから宛先を本文に自動入力するVBAマクロのコード_受信者の名字名から情報を取得

このVBAでは、受信者の名字に基づいて挨拶文を生成します。

Sub 挨拶文を挿入_名字基準()

    Dim objReItem As Outlook.MailItem
    Dim recipient As Outlook.Recipient
    Dim strAddBody As String
    Dim recipientAddress As String
    Dim japaneseLastName As String
    Dim exUser As Outlook.ExchangeUser
    Dim objDOC As Object

    ' 現在表示中のメールアイテムを取得
    Set objReItem = ActiveInspector.CurrentItem
    Set recipient = objReItem.Recipients.Item(1)

    ' ExchangeUserオブジェクトを取得し、Eメールアドレスを取得
    On Error Resume Next
    Set exUser = recipient.AddressEntry.GetExchangeUser
    If Not exUser Is Nothing Then
        recipientAddress = exUser.PrimarySmtpAddress
    Else
        recipientAddress = recipient.Address
    End If
    On Error GoTo 0

    ' 宛先の名前から日本語の挨拶文を生成
    japaneseLastName = Split(recipient.Name, " ")(0)
    strAddBody = japaneseLastName & "さん" & vbCrLf & vbCrLf & "お世話になっております。" & vbCrLf

    ' WordEditorオブジェクトを取得し、挨拶文を本文の先頭に追加し、フォントを設定
    Set objDOC = objReItem.GetInspector.WordEditor
    objDOC.Range(0, 0).In
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次