文字列マッチング CreateObject("VBScript.RegExp")
VBAで正規表現による文字列マッチング(検索)の手法を解説します。置換には RegExpオブジェクトのExecute関数を使用します。細かいプロパティの
詳細(MSDN)はこちらをご確認ください。
正規表現の設定とマッチングの流れ
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回以下の繰り返し。 |