RegExp オブジェクトの生成
Option Explicit
Function CreateRegExp(ByVal pattern As String, _
Optional ByVal ignoreCase As Boolean = False, _
Optional ByVal globalMatch As Boolean = True) As Object
Dim re As Object
Set re = CreateObject("VBScript.RegExp")
re.Pattern = pattern
re.IgnoreCase = ignoreCase
re.Global = globalMatch
Set CreateRegExp = re
End Function
プロパティ一覧
| プロパティ | 型 | 内容 |
|---|---|---|
Pattern | String | 正規表現パターン文字列 |
IgnoreCase | Boolean | True で大文字小文字を区別しない |
Global | Boolean | True で全マッチを検索(False は最初の1件のみ) |
MultiLine | Boolean | True で ^ / $ が行頭・行末にマッチ |
Test — 一致確認
Sub TestExample()
Dim re As Object
Set re = CreateRegExp("^\d{3}-\d{4}$") ' 郵便番号パターン
Debug.Print re.Test("123-4567") ' → True
Debug.Print re.Test("1234567") ' → False
Debug.Print re.Test("abc-1234") ' → False
Set re = Nothing
End Sub
Execute — マッチ結果の取得
Sub ExecuteExample()
Dim re As Object
Dim matches As Object
Dim m As Object
Set re = CreateRegExp("[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}")
Dim text As String
text = "連絡先: foo@example.com または bar@test.co.jp"
Set matches = re.Execute(text)
For Each m In matches
Debug.Print m.Value ' → foo@example.com / bar@test.co.jp
Next m
Set matches = Nothing
Set re = Nothing
End Sub
Replace — 置換
Sub ReplaceExample()
Dim re As Object
Set re = CreateRegExp("\d+") ' 数字列にマッチ
Dim result As String
result = re.Replace("注文番号 12345 の金額は 9800 円", "***")
Debug.Print result ' → 注文番号 *** の金額は *** 円
Set re = Nothing
End Sub
よく使うパターン集
| 用途 | パターン |
|---|---|
| 整数 | ^\d+$ |
| 小数 | ^\d+(\.\d+)?$ |
| 郵便番号 | ^\d{3}-\d{4}$ |
| 電話番号(ハイフンあり) | ^\d{2,4}-\d{2,4}-\d{4}$ |
| メールアドレス(簡易) | ^[^\s@]+@[^\s@]+\.[^\s@]+$ |
| 日付(yyyy/mm/dd) | ^\d{4}/\d{2}/\d{2}$ |
| HTMLタグ除去 | <[^>]+> |
| 連続スペース正規化 | \s+(置換先: " ") |
まとめ
VBScript.RegExp を使うと、Like 演算子では困難な複雑なパターンマッチングが実現できます。レイトバインディングで参照設定不要のため配布物にも使いやすい点が魅力です。
✅ 次の章では…
PART 10 では ファイル操作 を解説します。FileSystemObject と旧来の Open 文の違い、フォルダ再帰処理のパターンを紹介します。