こんにちは、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](https://life-is-simple.blog/wp-content/uploads/2020/11/vba_replace_mail_test.jpg)
すると、下記のように書けば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日間は無料なのでサクッと読んでみてはどうでしょうか。
以上、やまもとてつやでした。