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

vba-replace

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

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

当記事では、上記のような疑問にお答えします。

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

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

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

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

日報メールを自動化してから1分かからずにできるようになったので定時で帰れるようになりました。

今回の記事を読めば、

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

というメリットがあるので、ぜひ1度読んでみてください。

ちなみに、メールの自動化ができない人は下記の記事から読んでみてください。

目次

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

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

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

文字列であれば何でもOKで、任意の文字列に空白を指定すれば、該当の文字列を削除して送ることもできます。

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

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

上の2つはExcelですぐに出せるし、下は前もってどんな内容だったのかをメモすればOKです。

しかし、その内容をいちいちメールに転記するのが面倒でした。

で、今回紹介するreplace関数が、その転記をやってくれます。

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

replace関数の書き方

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

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

たとえば、こんなふうに書きます。

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(任意の文字列)です。

今回の例だと、以下のように書きます。

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

if構文で時間帯を分ける

ここまでできたら、あとは時間帯ごとに処理を分ければOKです。

  • 10時以降13時よりも前
  • 13時以降17時より前
  • それ以外

と、if構文を使って書きます。

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

仕上げ

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

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

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関数について解説しました。

replace関数をマスターすれば、かなりメール自動化の応用が効くのでぜひ試してみてください。

ちなみに、Excel VBAを勉強するなら、『できる イラストで学ぶ 入社1年目からのExcel VBA』がオススメです。

イラストや図解がふんだんに取り入れられているので、初心者でもサクサク読めちゃいます。

実際、僕もこの本を読んでExcel VBAの基礎を習得後、実際の業務を色々効率化してきました。

おかげで、会社を定時に帰れるようになり、空いた時間でWebライター活動をして月に10万くらい稼いでます。

本は、Kindle Unlimitedでも読めるし、登録してなくても登録後30日間は無料なのでサクッと読んでみてはどうでしょうか。

以上、やまもとてつやでした。

  • URLをコピーしました!

運営者プロフィール

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

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

目次