文字列マッチング CreateObject("VBScript.RegExp")
VBAで正規表現による文字列マッチング(検索)の手法を解説します。置換には RegExpオブジェクトのExecute関数を使用します。
正規表現の設定とマッチングの流れ
Dim reg, match
'正規表現のオブジェクト作成と設定
Set reg = CreateObject("VBScript.RegExp")
reg.Pattern = "[^http]" '検索パターン
reg.IgnoreCase = True '大文字と小文字を区別しない
reg.Global = True '文字列全体を検索する
'指定された文字列を正規表現で検索した結果のオブジェクト
Set match = reg.Execute("http://excel-mania.com")
サンプルコード
Dim reg, match, match2
Dim pat As String
Dim v1 As String
Dim v2 As String
v1 = Range("A2").Value '検索対象
Set reg = CreateObject("VBScript.RegExp") 'オブジェクト作成
pat = Range("A4").Value '検索パターン
'正規表現オブジェクトの設定
With reg
.pattern = pat '正規表現によるパターンを設定
.IgnoreCase = True '大文字と小文字を区別する
.Global = True '文字列全体を検索する
End With
'正規表現によるマッチングの実行
Set match = reg.Execute(v1)
'実行結果の解析
For Each match2 In match
v2 = v2 & "「" & match2.Value & "」が " & _
match2.FirstIndex & "文字目に見つかりました。" & vbCrLf
Next
'結果ダイアログを出力
MsgBox v2
実行結果
ダウンロード
RegExpオブジェクトのメソッド
| Replaceメソッド | object.Replace(string1, string2) | 対象文字列から正規表現string1をstring2に置換します。 |
| Executeメソッド | object.Execute(string) | 文字列を正規表現で検索し、Matchesコレクションを返します。 |
| Testメソッド | object.Test(string) | パターンにマッチする文字列が見つかったらTrue、見つからない場合はFalseを返します。 |
RegExpオブジェクトのプロパティ
| Patternプロパティ | 正規表現パターンを設定します。 |
| IgnoreCaseプロパティ | 大文字と小文字を区別する(False:規定値)、しない(True)を設定します。 |
| Globalプロパティ | 文字列全体を検索する(True)か、1回目のマッチで終了する(False)を設定します。 |
正規表現文字列
RegExpオブジェクトのPatternプロパティに設定できる正規表現文字列です。
| 文字 | 内容 |
| \ | 次に続く文字が特別な文字かリテラル文字であることを示す。つまり\nは改行文字になるが、nは文字nになる。 |
| ^ | 文字列の先頭。 |
| $ | 文字列の末尾。 |
| * | 直前の文字の0回以上の繰り返し。 |
| + | 直前の文字の1回以上の繰り返し。 |
| ? | 直前の文字と0回または1回一致。 |
| . (ドット) | 改行文字(n)以外の文字。 |
| [ ] | [ ] 内に含まれるいずれかの文字に一致します。[a-z]のように「-」を使って範囲指定。 |
| [^ ] | [^ ] 内に含まれている文字以外に一致します。[^a-z]のように「-」を使って範囲指定。 |
| ( ) | ( )内に指定した文字と一致します。 |
| | | 複数の文字列を1つのパターンとする。a|bとするとaまたはbと一致。 |
| \b | 単語の区切り(スペースや末尾)。 |
| \B | 単語の区切り以外。 |
| \d | 数字。[0-9]と同義 |
| \D | 数字以外。[^0-9]と同義 |
| \n | 改行文字。 |
| \f | 改ページ。 |
| \r | キャリッジリターン(行頭復帰)。 |
| \t | タブ。 |
| \v | 垂直タブ。 |
| \w | 単語に使用される文字。[A-Za-z0-9_]と同義 |
| \W | 単語に使用される文字以外。[^A-Za-z0-9_]とと同義 |
| \s | 空白文字、タブ文字。 |
| \S | 空白以外の文字。 |
| {x} | 直前の文字のx回の繰り返しに一致。 |
| {x,} | 直前の文字のx回以上の繰り返し。 |
| {x,y} | 直前の文字のx回以上、y回以下の繰り返し。 |