エクセルバージョン
マイクロソフト365
regexpオブジェクトはVBスクリプトのオブジェクトですが、VBAでもCreateObjectを使うか、参照設定(Microsoft VBScript Regular Expressions)することで使用可能になります。
非常に強力な検索ができますので。ぜひこの機会にマスターしちゃいましょう!
Menu
パターンの種類
abc | |
解説 | abcを含む |
結果 |
^ → (例)^https | |
解説 | 文字列の先頭が一致 |
結果 |
$(ドルマーク) → (例)_$ | |
解説 | 末尾の文字が一致 |
結果 | 使用例:正規表現(RegExp)で置換 |
.(ドット) → (例)c.t | |
解説 | .ドットが任意の一文字(改行は除く) |
結果 |
? → (例)https?:// | |
解説 | 直前のパターンが0回または1回現れる。 |
結果 |
+ → (例)https+:// | |
解説 | 直前のパターン1回以上の繰り返し。 |
結果 |
* → (例)https*:// | |
解説 | 直前のパターン0回以上の繰り返し。 |
結果 |
[ ] → (例)[abc] | |
解説 | [ ]の中の文字が1文字でも合致。 |
結果 |
| → (例)a|b|c | |
解説 | |で区切られた文字が1文字でも合致。 |
結果 |
[ – ] → (例)[a-z] | |
解説 | 小文字のa~zが合致。 |
結果 |
[^ – ] → (例)[^a-z] | |
解説 | 小文字のa~z以外 |
結果 |
その他 → (例)田(中|口) | |
解説 | 田中、田口が含まれてたら |
結果 |
省略形
\w | [a-zA-Z_0-9]と等価 |
\W | [^a-zA-Z_0-9]と等価 |
\d | [0-9]と等価(数字) |
\D | [^0-9]と等価(数字ではない) |
\s | 任意のスペース文字にマッチ |
\S | 任意の非スペース文字にマッチ |
RegExpのメソッドとプロパティ
メソッド/プロパティ | 内容 | 詳細 |
Pattern | パターン | 検索パターン設定 |
IgnoreCase | 大文字/小文字 | 大文字と小文字を区別しない(True) |
Global | 検索指定 | 文字列全体を検索(True) |
Test | 一致/不一致 | パターンの一致(True) |
Replace | 置換 | object.Replace(文字1,文字2)→文字2が表示 |
Execute | オブジェクト取得 | object.Execute(文字) |
MatchオブジェクトとMatchesコレクション
Matchオブジェクト
プロパティ | 詳細 |
FirstIndex | 最初にマッチした位置を取得 |
Length | マッチした文字数を取得 |
Value | マッチした文字列を取得 |
Matchesコレクション
プロパティ | 詳細 |
Count | Matchオブジェクトの個数取得 |
Item | Itemプロパティ取得 |
VBAサンプル
参照設定をする場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | Option Explicit Const OFFCOL As Integer = 1 Sub test() '参照設定 'Microsoft VBScript Regular Expressions Dim rExp As New RegExp Dim e As Range Range("B:B").ClearContents With rExp .Pattern = "^abc" 'パターンを指定① .IgnoreCase = False '大文字と小文字を区別(初期False)② .Global = True '文字列全体を検索(初期値False)③ For Each e In Range(Cells(1, 1), Cells(10, 1)) 'A1~A10を検索 If .test(e.Value) Then 'Test一致でtrue,不一致false④ e.Offset(, OFFCOL) = "○" End If Next End With Set rExp = Nothing End Sub |
CreateObjectを使用する場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | Option Explicit Sub test2() Dim rExp As Object Dim e, rng As Range Range("B:B").ClearContents Set rExp = CreateObject("VBScript.RegExp") Set rng = Range(Cells(1, 1), Cells(10, 1)) 'A1~A10を検索 With rExp .Pattern = "^abc" 'パターンを指定① .IgnoreCase = False '大文字と小文字を区別(初期False)② .Global = True '文字列全体を検索(初期値False)③ For Each e In rng If .test(e.Value) Then 'Test一致でtrue,不一致false④ e.Offset(, 1) = "○" End If Next End With Set rExp = Nothing End Sub |
試す場合
1 rExp.Pattern = ” “ ← ダブルクォーテーションの中にお好きなパターンを入力します。
2 A1~A10に検索したい文字をを入力します。
3 B列に結果として〇が表示されます。
関連記事
【エクセル関数】ワイルドカードとチルダで(~が含まれていたら)検索
【Excel VBA】メールの正規表現エラーチェック(RegExp)
【Excel VBA】Like演算子でパターンのサンプル例をご紹介!