VBAでOutlookの仕様『宛先へ付与される「’」』を表示名ごと削除する


退屈なことはVBAにやらせよう

OutlookでもExcelと同じようにVBAが使えます。便利なのに、Excelと比較するとあまり知られていないため、少しでも広まればと。
なお、本コードはOutlook2013、2010で動作を確認しています。

Outlookの仕様『宛先への「’」シングルクォーテーション付与』について

Outlookは、宛先、CC、BCCをシングルクォーテーションで囲う仕様になっています。
個人的に、これがなんとなく受け入れ難いです。自分で入れたわけではない余計な文字ですし。
また、下記の事象も発生し、とことんOutlookの仕様に抵抗するしかないと思いました。

  • 『'』だけでなく、『"』に囲まれることがある
  • 『'表記名'<'[email protected]'>』となった場合、『'』もメールアドレスの一部として認識されメール送信できない
  • 企業文化ですが、顧客に返信する際、表示名に『様』をつける

「'」と表示名を削除するコードとボタンの設定

下記を参考に、たとえばメール作成画面に『’』削除ボタンを配置します。
ボタンにマクロを割り当てる

Private Type typeMailAddress
    enabled As Boolean
    addr As String
    mailtype As Integer
End Type

Const MSG_DELETE_SINGLEQUOTATION As String = "「’」を削除しました"

Public Sub DelSinglequotation()

    Dim orgMail As MailItem
    Set orgMail = ActiveInspector.CurrentItem

    ' To,CC,BCCに設定されているメールアドレスの数
    Dim cntAddress As Long
    cntAddress = orgMail.Recipients.Count  

    '「’」削除後のメールアドレスを一時的に格納する
    Dim wkMailAddress() As typeMailAddress
    ReDim wkMailAddress(cntAddress) As typeMailAddress

    Dim i As Long
    Dim orgRecipient As Recipient

    '最後尾のMailAddressから対象にすることにより、メールアドレスの並びを出来る限り保持
    For i = cntAddress To 1 Step -1
        Set orgRecipient = orgMail.Recipients.Item(i)

        If orgRecipient.AddressEntry.Type = "SMTP" Then 'Exchangeは対象外
            wkMailAddress(i).addr = Replace(orgRecipient.address, "'", "")
            wkMailAddress(i).mailtype = orgRecipient.Type

            orgMail.Recipients.Remove i
            wkMailAddress(i).enabled = True
        Else
            wkMailAddress(i).enabled = False
        End If
    Next

    Dim newRecipient As Recipient

    '先頭のMailAddressから対象にすることにより、メールアドレスの並びを出来る限り保持
    For i = 1 To cntAddress
        If wkMailAddress(i).enabled = True Then

            ' 退避させた[’]無しメールアドレスを追加する
            Set newRecipient = orgMail.Recipients.Add(wkMailAddress(i).addr)
            newRecipient.Type = wkMailAddress(i).mailtype
            newRecipient.Resolve
        End If
    Next

    orgMail.Display
    MsgBox MSG_DELETE_SINGLEQUOTATION
End Sub

備考

表示名がなければ『様』を書かなくても良いんじゃないかという発想ですが、むしろ自動で付けるのもありな気がしました。
今後もOutlookの仕訳ルールで出来ないことをVBA(+α)で実現していきたいと思います。