[VB] VB や VBA で正規表現を利用する方法 | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

VB(6.0以前)や VBA で正規表現を使った文字列の検索や置換を行うには VBScript Regular Expressions に含まれる RegExp オブジェクトを使用します。(※)


※ VB.NET 以降の場合は、.NET Framework の RegEx クラスを使用します。


VBScript Regular Expressions には 1.0 と 5.5 の2つのバージョンが存在します。


前者は IE3.0、後者は IE5.5 に対応したものですが、若干機能強化されているだけに過ぎませんので、ここでは 1.0 でも使える機能にのみ触れることにします。


Visual Basic Scripting Edition バージョン情報


以下にサンプルコードを示します。


Sub main()

  Const str As String = "abc1def2ghi3"
test_execute (str) 'execute のテスト test_test (str) 'test のテスト test_replace (str) 'replace のテスト End Sub Function test_execute(str As String) Dim re As regExp '正規表現オブジェクト Dim matches As MatchCollection 'MatchCollectionオブジェクト Set re = New regExp '正規表現オブジェクトを作成します。 With re .IgnoreCase = True '大文字小文字を区別するよう設定します。 .Global = True '文字列全体を検索するよう設定します。 .Pattern = "[0-9]" '正規表現パターンを設定します。 End With Set matches = re.Execute(str) '正規表現による検索を実行します。 For Each match In matches '一致した文字列を順に表示します。 Debug.Print match.Value Next End Function Function test_test(str As String) Dim re As regExp '正規表現オブジェクト Set re = New regExp '正規表現オブジェクトを作成します。 With re .IgnoreCase = True '大文字小文字を区別するよう設定します。 .Global = False '最初の一致のみ検索するよう設定します。 .Pattern = "[0-9]" '正規表現パターンを設定します。 End With If re.Test(str) Then '正規表現による検索を実行します。 Debug.Print "Match!" Else Debug.Print "Unmatch!" End If End Function Function test_replace(str As String) Dim re As regExp '正規表現オブジェクト Set re = New regExp '正規表現オブジェクトを作成します。 With re .IgnoreCase = True '大文字小文字を区別するよう設定します。 .Global = True '最初の一致のみ検索するよう設定します。 .Pattern = "[0-9]" '正規表現パターンを設定します。 End With Debug.Print re.Replace(str, "#") '正規表現による置換を実行します。 End Function


VB や VBA で VBScript Regular Expressions を使用するには、まず[参照設定]で "VBScript Regular Expressions 1.0"または"VBScript Regular Expressions 5.5"を参照するよう設定します。


その上で、最初に正規表現オブジェクト(regExp)を作成し、必要なプロパティを設定した後、execute、test、replace の各メソッドを実行するという手順で利用します。


execute メソッドは正規表現による検索を行い、一致した文字列や位置を Match または MatchCollection として返します。


test メソッドは正規表現による検索を行い、一致する場合に TRUE、一致しない場合に FALSE を返します。


replace メソッドは正規表現による検索を行い、一致する場合に指定した文字列に置換します。



若干、煩わしさはありますが、複雑なデータチェック処理などを容易に実装できますので、処理の内容によっては利用価値はあると思います。