エクセルマニア

VBAで正規表現による文字列マッチング

TOP > VBA・マクロ >  正規表現による文字列マッチング
このエントリーをはてなブックマークに追加

文字列マッチング 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回以下の繰り返し。


このエントリーをはてなブックマークに追加