正規表現とはいくつかの文字列を一つの形式でまとめて表現するための表現方法のことです。
目次
参照設定
VBEのメニューから[ツール]>[参照設定]から参照設定ダイアログを開き[Microsoft VBScript Regular Expression 5.5]にチェックを入れてOKボタンをクリックします。
参照設定を行わなくても
| パターン | |
|---|---|
| . | |
| * | |
| ^ | |
| $【Excel VBA】【Excel VBA】R | |
正規表現を利用する
VBAで正規表現を利用する手順は次の通りです。
- RegExpオブジェクトを作成する。
- オブジェクトのプロパティを設定する。
- オブジェクトをメソッドで正規表現を使った処理を行う。
1つずつ順番に見ていきましょう。
RegExpオブジェクトを作成する
VBAで正規表現を利用するにはRegExpオブジェクトが必要です。RegExpオブジェクトは次のように作成できます。
Dim re As RegExp
Set re = New RegExp
プロパティを設定する
RegExpオブジェクが作成出来たらプロパティを設定します。
| プロパティ | 説明 |
|---|---|
| Pattern | |
| IgnoreCase | デフォルトはFalse。 |
| Global | デフォルトはFalse。 |
| Multiline | デフォルトはFalse。 |
メソッドを使用する
| プロパティ | 説明 |
|---|---|
| Execute | |
| Replace | パターンにマッチした文字列を置換する。 |
| Test | パターンとマッチングを行い、マッチした場合はTrueを返す。 |
置換
RegExpオブジェクト.Replace(置換対象文字列, 置換文字列)
パターンにマッチするか確認する ― Testメソッド
引数に渡された文字列を検索し、パターンにマッチする文字列が見つかればTrueを返し、見つからなければFlaseを返します。
RegExpオブジェク.Test(文字列)
する ― Executeメソッド
Executeメソッドは、string内で見つかった文字列ごとに存在するMatchオブジェクトを含む、MatchCollectionコレクションを返します。一致する文字列が見つからない場合、空のMatchCollectionコレクションを返します。
RegExpオブジェク.Execute(文字列)
Matchオブジェクト
| プロパティ | 説明 |
|---|---|
| FirstIndex | マッチした位置を返します。検索文字列の始めを基点の0とするオフセットを使用します。つまり、文字列の最初の文字が0として識別されます。 |
| Length | マッチした文字列の長さを返す。 |
| Value | マッチした文字値またはテキストを返す。 |
パターン
正規表現のパターンは通常文字とメタ文字を組み合わせです。メタ文字とは正規表現の中で特別な意味をもった文字のことで、VBAでは次のようなメタ文字があります。メタ文字以外は通常文字です。
^ $ ? * + . | { } \ [ ] ( )
^ $ ? * + . | { } \ [ ] ( )
1文字にマッチ
| 説明 | |
|---|---|
| 通常文字 | 通常文字はその文字そのものにマッチします。 |
| . | 任意の1文字(ただし改行文字は除く) |
| [文字列] | 文字列のいずれか1文字にマッチ。「-」で範囲を指定可能。 |
| [^文字列] | 文字列のいずれか1文字以外にマッチ。「-」で範囲を指定可 能。 |
通常文字はその文字そのものにマッチします。
With re
.Pattern = "bet"
.Global = True
End With
Set matches = re.Execute("bat bet bit beet")
For Each m In matches
Debug.Print m.Value
Next
「.」は改行文字の除く任意の1文字にマッチします。
With re
.Pattern = "b.t"
.Global = True
End With
Set matches = re.Execute("bat bet bit beet")
For Each m In matches
Debug.Print m.Value
Next
With re
.Pattern = "b[abcde]t"
.Global = True
End With
Set matches = re.Execute("bat bet bit beet")
For Each m In matches
Debug.Print m.Value
Next
bat、betを表示します。
With re
.Pattern = "b[^abcde]t"
.Global = True
End With
Set matches = re.Execute("bat bet bit beet")
For Each m In matches
Debug.Print m.Value
Next
tを表示します。