Sponsored Link
[Excel, VBA]正規表現を使う
正規表現のオブジェクトを生成
CreateObject("VBScript.RegExp")
以下プロパティやメソッドを使用する。
プロパティ
- Pattern
検索する際の正規表現のパターンを設定する。 - IgnoreCase
検索する際の大文字と小文字を区別するかの真偽値。
デフォルトはFalse(区別する) - Global
検索文字列を全て検索する(True)か最初に一致したものだけを検索する(False)か。
デフォルトはFalse
メソッド
- Test(str)
strの文字列にPatternが含まれているかを検索して、一致する文字列があるか真偽値を返す。 - Replace(str1, str2)
str1の文字列にPatternが含まれているかを検索して、
一致するものがあれば、str2に置換をする。 - Execute(str)
strの文字列にPatternが含まれているかを検索して、
一致した文字列ごとに、存在するMatchオブジェクトを含む、Matchesコレクションを返す。
Matches
RegExpオブジェクトのExcecuteメソッドによってのみ使用可能。
Matchesコレクションは、Matchオブジェクトの集合である。
- Execute(str).Count
Patternに一致する個数を返す。 - Execute(str).Item
Matchesから、Matchオブジェクトにアクセス出来る。
※Itemを使用しなくても、Matches(0)のようにしてもアクセス出来る。
Match
nはアクセスしたい数値を入れる。
- Execute(str).Item(n).FirstIndex
最初にマッチした位置を返します。(0始まり) - Execute(str).Item(n).Length
マッチした文字列の長さを返します。 - Execute(str).Item(n).Value
マッチした文字列を返します。
Ex.1)正規表現の使用方法
Sub regExp_sample()
Dim reg, match As Object
Dim str As String
str = "testをするからtestがちゃんとtestされているかTestしてね"
' RegExpオブジェクトの生成
Set reg = CreateObject("VBScript.RegExp")
' 正規表現パターンを入力(この条件で検索される)
reg.Pattern = "test"
' 検索条件に当てはまる文字列があれば、Trueを返す。
' 今回はTrueが返る。
Debug.Print reg.Test(str)
'-----------------------------------------------
'ここから「Global」と「IgnoreCase」の挙動を確認
'-----------------------------------------------
' GlobalがFalseのため、1が返る。
Debug.Print reg.Execute(str).Count
reg.Global = True
' GlobalをTrueにしたため、3が返る。
' IgnoreCaseがFalseのため、「Test」はカウントされない
Debug.Print reg.Execute(str).Count
reg.IgnoreCase = True
' IgnoreCaseをTrueにしたため、4が返る。
Debug.Print reg.Execute(str).Count
'-----------------------------------------------
'ここから「Execute」の挙動を確認
'-----------------------------------------------
Set match = reg.Execute(str)
' 2回目に一致した文字列の長さを返す。今回は4が返る。
' reg.Execute(str).Item(1).Length これと同じ挙動
Debug.Print match(1).Length
' 1回目に一致した文字列の位置を返す。今回は0が返る。
Debug.Print match(0).FirstIndex
' 3回目に一致した文字列の位置を返す。今回は18が返る。
Debug.Print match(2).FirstIndex
' 4回目に一致した文字列を返す。今回は「Test」が返る。
Debug.Print match(3).Value
'-----------------------------------------------
'ここから「Replace」の挙動を確認
'-----------------------------------------------
' strの中から、Patternに一致するものを置換する。
' IgnoreCaseをTrueにしたため、大文字と小文字は区別しない。
Debug.Print reg.Replace(str, "xxx")
Set match = Nothing
Set reg = Nothing
End Sub