【入門編】【中級者向け】メール本文内の「URL」を正規表現で検出し、クリック可能なHTMLリンクタグに自動変換する処理 – Outlook VBA解析バイブル

スポンサーリンク

こんにちは! Outlook VBAの自動化の世界へようこそ。
マクロの記録ボタンを押すだけの世界から一歩抜け出し、自分の手でロジックを組み立てる楽しさを知ったあなたなら、きっと今日のテーマもワクワクしながらマスターできるはずです。

今回は、実務でめちゃくちゃ需要が高い「メール本文中のURLを、自動的にクリック可能なHTMLリンク(``タグ)に変換する技術」を解説します。

「テキストで貼り付けただけのURL、相手がわざわざコピペしなきゃいけなくて不親切だな…」
そんなモヤモヤを、VBAと正規表現の力でスマートに解決しましょう!ここをクリアすれば、メール作成の自動化スキルが一段とランクアップしますよ。

なぜ「正規表現」と「HTMLBody」が必要なのか?

Outlookでメールを送る際、本文を指定するには主に以下の2つのプロパティを使います。

1. `Body` プロパティ: 純粋なテキスト(プレーンテキスト)を扱う。
2. `HTMLBody` プロパティ: HTMLタグ(`` や `
` など)を解釈できる。

プレーンテキストのままでは、どれだけ頑張っても文字はただの文字列のままです。URLをリンクにするには、本文をHTML形式(`HTMLBody`)で構築し、URL部分を `URL` というHTMLタグに書き換えてあげる必要があります。

そこで登場するのが、VBScriptの正規表現エンジン(`VBScript.RegExp`)です。
「http://」や「https://」から始まる文字列のパターンを一瞬で探し出し、魔法のようにHTMLタグで包み込んでくれます。

【実践】URLを自動リンク化するVBAコード

それでは早速、実際のコードを見てみましょう。
開発タブのVBE(Visual Basic Editor)を開き、標準モジュールに以下のコードを貼り付けてみてください。

Sub CreateHyperlinkedMail()
Dim olApp As Outlook.Application
Dim olMail As Outlook.MailItem
Dim rawBody As String
Dim htmlBody As String

‘ 1. Outlookアプリケーションとメールアイテムのオブジェクトを取得
Set olApp = New Outlook.Application
Set olMail = olApp.CreateItem(olItemMail)

‘ 2. 送信先の宛先や件名を設定
With olMail
.To = “sample@example.com”
.Subject = “【自動送信】本文URLの自動リンク化テスト”

‘ 3. 元となるテキスト(URLが含まれている文章)を作成
‘ 改行はHTMLなので
を使います
rawBody = “お疲れ様です。

” & _
“今回のプロジェクトに関する資料をアップロードしました。
” & _
“確認用URL:https://example.com/project/docs?id=12345

” & _
“詳細な仕様書は社内ポータル(http://intranet.example.com/)からもご覧いただけます。

” & _
“よろしくお願いいたします。”

‘ 4. 正規表現を使ってURLをHTMLリンクに置換する関数を呼び出す
htmlBody = ConvertUrlToHtmlLink(rawBody)

‘ 5. HTMLBodyに流し込む(CSSでフォントを指定しておくとキレイに見えます)
.HTMLBody = “

” & htmlBody & “

‘ 6. 画面にメールを表示する(いきなり送信せず、まずは目視確認!)
.Display
End With

‘ オブジェクトの解放
Set olMail = Nothing
Set olApp = Nothing

MsgBox “URLの自動リンク化が完了しました!”, vbInformation, “処理成功”
End Sub

‘ =================================================================
‘ 汎用関数:テキスト内のURLを検出し、HTMLのアンカータグに置換する
‘ =================================================================
Function ConvertUrlToHtmlLink(ByVal targetText As String) As String
Dim regEx As Object
Set regEx = CreateObject(“VBScript.RegExp”)

With regEx
‘ 【重要】URLを検出するための正規表現パターン
‘ http:// または https:// から始まり、スペースや改行、特定の記号以外の文字が続く部分をキャッチ
.Pattern = “https?://[\w!?/+\-_~=;\.,&@#$()%]+”

‘ 大文字・小文字を区別しない
.IgnoreCase = True

‘ マッチしたものをすべて置換する(Global = True)
.Global = True
End With

‘ $& は「正規表現でマッチした文字列そのもの」を意味します
‘ 例: https://example.com -> https://example.com
ConvertUrlToHtmlLink = regEx.Replace(targetText, “$&“)

Set regEx = Nothing
End Function

ジックリとコードを眺めて、「ほうほう、なるほど!」と思ってもらえましたか?
ここで、初心者から中級者へステップアップするために、特に重要なポイントを3つ解説します。

1. 正規表現(RegExp)のパターンに注目!

`Pattern = “https?://[\w!?/+\-_~=;\.,&@#$()%]+”`
この呪文のような文字列が、世の中にある大半のURLを正確にハントしてくれます。
`https?` の部分で、「http://」と「s」があってもなくても(つまりhttps://にも)両方に対応できるようにしているのがプロっぽいテクニックです。

2. ダブルクォーテーションの重ね技に注意

VBAの文字列の中でダブルクォーテーション(`”`)を使いたいときは、`””` と2回連続で書くルールがあります。
HTMLタグを書くときにこれが頻出するので、
`”“` の部分は、HTMLとして出力されるときに正しく `` に変換されるよう、少しおまじないだと思って慣れていきましょう。

3. いきなり `.Send` せず `.Display` で確認する

業務自動化で一番怖いのは、意図しない誤ったメールを勝手に送信してしまうことですよね。
コードの最後は `.Send` ではなく `.Display` にして、「正しくリンクに変換されているか」を自分の目で確認する。これがエンジニアとしての安全第一の鉄則です。

陥りやすいエラーと対策

  • Q. リンクをクリックしても「ファイルが見つかりません」になる
  • A. 正規表現のパターンがURLの末尾の「。」や「)」まで巻き込んでしまっている可能性があります。今回紹介したパターンは実用的な文字種に絞っていますが、もし変な記号が含まれていたらパターンの末尾を調整してみてください。
  • Q. 日本語のドメインや全角URLが混ざっている
  • A. 業務メールでは原則としてURLは半角英数字と半角記号ですが、もし例外がある場合は別途エスケープ処理が必要になります。基本は「URLは半角」と割り切るのが自動化のコツです。

まとめ

今回は、Outlook VBAで正規表現を使い、本文中のURLを自動でクリック可能なHTMLリンクに変換する方法を解説しました。

「テキストメールをHTMLメールに仕立て上げ、さらにURLをリンク化する」という一連の処理が書けるようになると、システム連携の通知メールや、定期配信のメルマガ作成など、あらゆる業務の自動化に応用が効くようになります。

ここをクリアできたあなたなら、もうOutlook VBAの基本はバッチリです!
ぜひ明日の実務で試して、周囲をあっと言わせる自動化ツールを作ってみてくださいね。それでは、また次の知見でお会いしましょう!

タイトルとURLをコピーしました