皆様こんにちは、ノグチです。
日々のお仕事に欠かせない、メール。
連絡手段として便利なツールですが、送られる方の日々の業務負担になっていたりすることもあります。
例えば、日々の業務内容と作業時間をメールで報告する、所謂日報、というもの。
この日報の中で勤務開始時間と終了時間を書いて上長に送っているのに、更に勤務表が存在していることが少なくありません。
上長はこの日報と、部下から提出された勤務表を突き合せて勤務表の承認をするなど、業務の負荷になっていることがあるようです。
日報として送信するメールはフォーマットが決まっていることが多いので、フォーマットに従って、見たい情報だけを取り出して、例えばエクセルのシートに書き出すことができれば、確認作業が楽になるかもしれません。
MailItemオブジェクトのおさらい
さて、メールを操作するには、MailItemオブジェクトを取得する必要があることは以前の記事でお伝えしました。
メールの本文は、MailItemオブジェクトのBodyプロパティで取得することができるので、メール本文にあった取得方法をコーディングすれば、欲しい情報がメール本文から取り出せるという訳です。
では早速、今ウインドウで開いているメール本文から、欲しい情報を取り出してみましょう!
ちなみに、今開いているメールのウインドウ操作については、下記記事で紹介していますので、併せてご覧くださいね。
メール本文から目的の情報を取り出してみる
BodyプロパティとMid関数で欲しい情報を取り出す
例えば、下のメールから、作業時間だけを取り出したいとします。
このメールの本文である、MailItemオブジェクトのBodyプロパティを、VBEのウォッチ式で覗いてみると、こんな感じになっています。
一見すると1行目と2行目の間にスペースが入っているように見えますが、メール本文上で改行していますので、このスペースには改行コードの「vbCrLf」が存在しています。
“【作業時間】13:00~16:00vbCrLf【作業時間計】5HvbCrLf【作業内容】xxxxxxxxxxxxxxxxxxxxxxxx”
こんな風に書かれているイメージです。
なので、メール本文の作業時間だけを取り出したいならば、メールの先頭から「【作業時間】」の6文字を除いた7文字目から、最初の改行コードまでを取り出せばOK。
コードはこんな風に記述できます。
Mid(MailItemオブジェクト.Body, Len("【作業時間】") + 1, Instr(MailItemオブジェクト.Body, vbCrLf) - Len("【作業時間】") + 1)
Mid関数を使って、メール本文の7文字目から改行コードのある文字列までを取得しています。
メールから欲しい情報を取り出す為のコードのメイン部分はこれだけです。
メール本文から目的の情報を取り出すコード
試しに取得した内容を、メッセージで表示してみましょう。
全体はこんな感じのコードになります。
今開いているメールの、【作業時間】という文字列の次の文字から改行コードまでをの文字列を取得して、メッセージ表示するというものです。
Sub Get_MailBody() Dim objItem As Object Dim objIns As Inspector Dim lngStart As Long Dim lngEnd As Long Set objIns = Application.ActiveInspector Set objItem = objIns.CurrentItem '今開いているメールオブジェクトを取得 With objItem MsgBox Mid(objItem.Body, Len("【作業時間】") + 1, (InStr(objItem.Body, vbCrLf) - Len("【作業時間】") + 1)) End With End Sub
このコードを実行してみると…
メール本文は決まったフォーマットで
この記事でご紹介した方法なら、受信メール本文ボックス内のメールを対象にして、複数のメールからまとめて文字を取り出すこともできそうです。
例でご紹介したように、日々の勤怠を日報で上長に送っていて、その報告内容と勤務表やタイムカードと照らし合わせたい…といったとき。
1ヶ月分のメールを対象にしてこの方法で一気に対象の文字をメールから取り出して、エクセルのシートに貼り付けて一覧にしてしまえば、楽に勤務時間や勤務内容を把握することができますね。
しかし、そのためには送信されてくるメール本文が、決まったフォーマットで書かれている必要があります。
【作業時間】xxxxx(改行)【作業内容】xxxxxx
と書いて欲しいのに、
【時間】xxxxx(改行)【作業内容】xxxxx
のように書かれてしまうと、上のコードでは欲しい情報がメール本文から取り出せなくなってしまいます。
なので、そのあたりの運用上のルールも考えておかなければいけません。
最後に
今回は、メールの本文から特定の文字を取り出す方法をご紹介しました。
様々なシステムで勤怠管理ができるようになっている昨今、未だメールでの時間報告をしなければならない職場もあるようです。(筆者の経験より)
メールで報告する方も面倒臭いですが、メールと勤怠表を突き合せたりして面倒くさい!とお嘆きの方は、今回の記事でご紹介した方法を使えば少し楽になるかもしれませんね。
それでは、最後までお読みいただきありがとうございました!
連載目次:Outlook VBAでメールを操作してみよう
メーラーとして名高く、そして便利なOutlook。
Outlookのメールだって、VBAで操作することができますよ。本シリーズでは、Outlookのメールを、VBAで操作する方法をご紹介していきます。