outlookVBAでreplace関数を使いメールの内容を変えてみる

vba-replace

こんにちは、RPAライターのやまもとてつやです。

  • メールの自動化はできたけど、件名や内容を変えてみたい
  • replace関数ってどうやって使うの?

今日はこんな疑問にお答えします。

メールの自動化ができると、仕事もだいぶ楽になりますよ。

しかし、自動化したいメールの中には日報のように数値や内容を変えて送りたいメールもあるのではないでしょうか。

その際、使用するVBA関数としてreplace関数があります。

replace関数を使えばメールの内容を宛先に合わせて変更して送ることも可能です。

僕は、Webライターとしての活動時間を捻出すべく、VBAを勉強してメールやExcelの自動化に取り組んできました。

今回のような日報メールの場合だと、メールを作ってから数値を変えて送るまでに20分ぐらいかかるんですよね……。

それが、数値や内容の変更も自動化できてからは、ほぼ定時で帰れるようになりました。

当記事では、メールの内容を適切に変更するreplace関数の使い方を解説します。

ぜひご一読ください。

この記事でわかること(メリット)
  • メールの件名や内容を変えて送信できるようになる
  • replace関数の使い方がわかる
  • 様々なメールに応用できるので、仕事を時短できる
目次

replace関数でメールの件名や本文を置き換える

今回のテーマである「メールの件名や内容を変える」には、replace関数を使います。

replace関数は、指定した文字列を任意の文字列に置き換える関数です。

置き換える文字列は何でもOKで、任意の文字列に空白を指定して文字列を削除ということもできます。

たとえば、僕はヘルプデスクのSVだったとき以下のメールを毎日送っていました。

送っていたメールの内容
  • 1日にどれだけ問い合わせがあったか
  • 問い合わせ種別(ログインについてとか)ごとにどれだけ問い合わせがあったか
  • ヤバそうな問い合わせがあったか

上の2つはExcelですぐに算出できるし、下は勤務中にどんな内容かをメモしておきます。

しかし、その内容をいちいち手作業で転記するのが面倒でした。

今回紹介するreplace関数を使えば、その転記を自動化できます。

応用次第で、メール以外でも使える汎用性の高い関数なので覚えて損はありません。

replace関数の書き方

replace関数の書き方は、以下の通り。

replace(セル番地,変更したい文字列,変更後の文字列)

たとえば、セルA1の文字列を変更するなら下記のように書きます。

replace(Range("A1"),"ほげほげ","およおよ")

これで、A1セルに入っている「ほげほげ」という文字列が、「およおよ」に変わります。

文字列を削除したい場合は、下記のように書きます。

replace(Range("A1"),"ほげほげ","")

replace関数を使って時間帯ごとに件名や内容を置き換える

では、実際に僕が経験した業務を通してreplace関数を使ってみましょう。

業務内容は、同じ内容のメールを時間帯ごとに件名や内容を置き換えて送信するという業務です。

以下の時間でメールを送ると想定します。

送信する時間帯
  • 10時
  • 13時
  • 17時

比較演算子を使って、時間帯を表す

時間帯は、比較演算子を使えば表示可能です。

メールを送る時間帯が10時と13時、17時ということは以下のようになります。

  • 10:00~12:59
  • 13:00~16:59
  • 17:00~翌日の9:59

10:00~12:59を現在時刻と比較して書くなら、現在時刻が10時よりも後で、13時よりも前となります。

ですので、書き方は以下の通り。

10:00 >= 現在時刻 < 13:00

現在時刻の書き方は色々ありますが、ひとまずはTime And Timeと書きましょう。

したがって、時間帯は以下のように書きます。

10:00 >= Time And Time < 13:00

他の時間帯も同様です。

cdate関数で文字列を日付型に変える

しかし、このままだとエラーが発生します。

そこで使うのがcdate関数。

cdate関数は、指定した文字列を日付型に変換する関数です。

今回の場合、以下のように書きます。

CDate("10:00") >= Time And Time < CDate("13:00")

if構文で時間帯を分ける

ここまでできたら、あとは時間帯ごとにifステートメントを使って処理を分ければOKです。

Excelには、下のように入力しています。

vba_replace_mail_test

ですので、下記のようにコードを書けばOKです。

If CDate("10:00") >= Time And Time < CDate("13:00") Then
   .Subject = Replace(Range("C6"), "(時間)", "10時")
ElseIf CDate("13:00") >= Time And Time < CDate("17:00") Then
   .Subject = Replace(Range("C6"), "(時間)", "13時")
Else
   .Subject = Replace(Range("C6"), "(時間)", "17時")
End If

一応解説すると、まず現在時刻が10時から13時までの間であれば、件名にある(時間)を10時に変更します。

で、現在時刻が13時から17時の間であれば、13時に(時間)が変わります。

そして、上の2つ以外=17時以降であれば(時間)が17時に変わるということです。

仕上げ

最後に、メール自動化のテンプレートと組み合わせて書いてみましょう。

コードは、以下になります。

Sub test()
    'Outlookを起動
    Dim OutlookObj As Outlook.Application
    Set OutlookObj = CreateObject("outlook.application")

    'メールアイテムを作る
    Dim MyMail As Outlook.MailItem
    Set MyMail = OutlookObj.createItem(olMailItem)
    
    With MyMail
    .to = Range("C2") '宛先
    
    .Subject = Range("C6") '件名
    .Body = Range("C7")
    
    If CDate("10:00") >= Time And Time < CDate("13:00") Then
        .Subject = Replace(Range("C6"), "(時間)", "10時")
    ElseIf CDate("13:00") >= Time And Time < CDate("17:00") Then
        .Subject = Replace(Range("C6"), "(時間)", "13時")
    Else
        .Subject = Replace(Range("C6"), "(時間)", "17時")
    End If
    
    .display 'メールを表示
End With
    
End Sub

コードを実行すると、メール本文が出てくるので内容を確認して送信ボタンを押しましょう。

まとめ

以上、replace関数について解説しました。

なお、本格的にOutlook VBAを勉強するなら本で勉強するのがオススメ。

リンクで紹介している本は、「いつも隣にITのお仕事」というサイトを運営している高橋さんの本です。

ぜひ、一度読んでみてはどうでしょうか。

本日も最後まで読んでいただき、ありがとうございました。

  • URLをコピーしました!

運営者プロフィール

やまもとてつやのアバター やまもとてつや RPAライター

2021年10月にライター活動開始。
得意ジャンルはIT(Windows・RPA)と金融(保険・仮想通貨)。
SEOライティングとSNS運用を中心に活動中で、最近は念願だった電子書籍の執筆・編集も担当。
AI以上に正確で格調高い文章が書けると評価をいただいています。

目次