こんにちは、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には、下のように入力しています。
ですので、下記のようにコードを書けば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のお仕事」というサイトを運営している高橋さんの本です。
ぜひ、一度読んでみてはどうでしょうか。
本日も最後まで読んでいただき、ありがとうございました。