2014/03/13

【Outlook】メールを再送したい VBA編



こんにちは!「速いは美学!」がモットーのtknriaです!


メーラー「Outlook(読み:アウトルック)」の唯一の難点ともいえる、「再送信」のわかりにくさ。

これまでに2つ、その方法をお伝えしてきました。

今回は、最も速く再送信できる方法をお伝えします。

それはOutlook VBAを用いるものです。

これまでの2つに比べて前準備がとても複雑になっているので、覚悟をもってお進みください。



Outlook VBAで再送信するメリット


設定方法をお伝えする前に、この方法を用いることでどんなメリットがあるか、考えてみたいと思います。


従来の方法からこの方法に切り替えることで、1回の再送信あたり約2sec削減できるとします。

1日に1人が5回使えば、1日、1人あたり10secの削減。

この機能を100人規模の会社に導入し、1年間(240営業日)使用すると、

10sec/人・日 * 100人 * 240日 = 240,000sec/年 = 4,000min/年 = 66.7h/年 の削減になります。


1hあたり3,000円の利益を創り出しているとすると、年間20万円の増益。

この機能を実装するのに必要な工数は、100人に導入しても2h程度。


従って、0.6万円の利益創出を一旦止めることで、毎年、年間20万円のプラス。

このプラスが、実装した初年度だけでなく、Outlookを使い続ける限り続きます。


経営者として、これを見逃す手はないのではないでしょうか。

ここまでメリットをお伝えしてきたので、次はいよいよ方法をお伝えします。



Outlook VBAで再送信する方法


少し複雑で、8ステップもありますが、上記のメリットのために頑張ってチャレンジしてみましょう!


1.Outlookを起動した状態で、「Alt + F11」でVBEを開く。


2.以下のVBAコードをコピペして保存。


3.コード中のSAVE_PATHのパスと一致するように、必要であればフォルダを作成する。

  (パスのほうを変更しても問題ない)


4.リボン上で右クリックして、「リボンのユーザー設定」を選択。


5.「ホーム(メール)」内に新しいグループを作成し、名前を変更する。


6.作成したグループを選択しながら、左側の「コマンド選択」で「マクロ」を選択する。


7.2.で作成したマクロ(デフォルトだとマクロ名の終わりが「Resending」)を選択して追加。


8.追加したマクロの名前とアイコンを変更する。


'-------以下、ソース

Public Sub Resending()
    Const PR_SMTP_ADDRESS = "http://schemas.microsoft.com/mapi/proptag/0x39fe001e""
    Const SAVE_PATH = "D:\temp_attach\"      ' 添付ファイルを一時保存しておくフォルダ
    On Error Resume Next
    Dim orgMail As MailItem
    Dim newMail As MailItem
    Dim orgRec As Recipient     'recipient は 宛先、受取人
    Dim newRec As Recipient
    Dim strAddress As String
    Dim strSmtp As String
   
    If TypeName(ActiveWindow) = "Inspector" Then
        Set orgMail = ActiveInspector.CurrentItem
    Else
        Set orgMail = ActiveExplorer.Selection(1)
    End If
   
    Set newMail = Application.CreateItem(olMailItem)
   
    newMail.Subject = orgMail.Subject
   
    Dim orgAttach As Attachment
    Dim strFileName As String
    For Each orgAttach In orgMail.Attachments
        strFileName = SAVE_PATH & orgAttach.FileName
        orgAttach.SaveAsFile (strFileName)
        newMail.Attachments.Add (strFileName)
        Kill (strFileName)
    Next
   
    newMail.Body = orgMail.Body
   
    For Each orgRec In orgMail.Recipients
        With orgRec
            If .AddressEntry.Type = "SMTP" Then
                strAddress = .Address
            Else
                strAddress = .AddressEntry.PropertyAccessor.GetProperty(PR_SMTP_ADDRESS)
            End If
        End With

        If InStr(orgRec.Name, strAddress) = 0 Then
            Set newRec = newMail.Recipients.Add(orgRec.Name & "<" & strAddress & ">")
        Else
            Set newRec = newMail.Recipients.Add(orgRec.Name)
        End If
        newRec.Type = orgRec.Type
    Next
   
    newMail.Display
   
End Sub

'-------以上、ソース


さて、お疲れさまでした。

以上が設定です。


では、実際にOutlookでメールを再送してみましょう。



Outlook VBAで再送してみる


わざわざ章を分けていますが、それほど書くことがありません。

なぜか。

それは、再送信したいメールを選択した状態で、先ほど作成したボタンをクリックするだけだからです。



これだけ!

初級編に比べるととても速くなりました!!

ちなみに、再送する対象メールの添付ファイルが重いときは、さすがにちょっと遅くなってしまいます。



億劫なあとがき


いかがでしょうか。

VBAを使いますし、それぞれの状況に合わせてカスタマイズが必要なので、ちょっと苦手意識を持たれるかもしれません。

私自身もプログラミングは得意というレベルではないので、その気持ちがわかります。

しかし、チャレンジしてみて実装できたときの感覚が最高だということも知っています。

どちらを選択するかは、あなた次第です。



関連記事

・これからGASを始めたい!という方にはこちらの記事がオススメ
 → 億劫な細道「GAS まずGASを使ってみたい

・VBAやGASについてもっとざっくり知りたい方はこちらの記事がオススメ
 → 億劫な細道「VBAやGASを用いた業務効率化のススメ