【作成中】【Excel VBA】正規表現

正規表現とはいくつかの文字列を一つの形式でまとめて表現するための表現方法のことです。

目次

参照設定

VBEのメニューから[ツール]>[参照設定]から参照設定ダイアログを開き[Microsoft VBScript Regular Expression 5.5]にチェックを入れてOKボタンをクリックします。

参照設定を行わなくても

パターン
.
*
^
$【Excel VBA】【Excel VBA】R

正規表現を利用する

VBAで正規表現を利用する手順は次の通りです。

  1. RegExpオブジェクトを作成する。
  2. オブジェクトのプロパティを設定する。
  3. オブジェクトをメソッドで正規表現を使った処理を行う。

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を表示します。

よかったらシェアしてね!
  • URLをコピーしました!
目次