先日、正規表現について調べてみました。
いや~。正規表現って、まるで暗号!コナンになったつもりで解読しないと。カンタンなのは読めるけど、ムズカシイやつはわたしの脳みそでは無理だ。。。
エクセルVBAでも正規表現が使えるとのことで、やってみました。
◆VBAで正規表現を使うにはVBScriptのRegExpを利用する
①参照設定で「Microsoft VBScript Regular Expressions 5.5」にチェック
または
②CreateObjectで実行時バインディングする。
Dim re As Object
Set re = CreateObject(“VBScript.RegExp”)
RegExp はRegular Expressions の略みたいですね。
◆RegExpを利用するには以下の手順で行う
1)事前準備
①検索範囲を設定(Globalプロパティ)
②大文字小文字の扱いの設定(IgnoreCaseプロパティ)
③検索文字列/パターンを設定(Patternプロパティ)
2)メソッドの実行
・存在チェック(test)
・置換(Replace)
・検索(Excute)
1)事前準備について:RegExpの3つのプロパティ
①Global : 検索範囲の設定
検索対象文字列の左端から1度だけ検索するか(=False)、1度見つかった後も右側の残りの文字列に対しても検索するか(=True)を指定します。規定値はFalse。
②IgnoreCase : 大文字小文字の扱いの設定
大文字小文字を区別するか。区別しない(=False)、区別する(=True)。規定値はFalse
③Pattern : 検索文字列/パターンを設定
検索したい正規表現のパターンを設定。
正規表現の記述方法については詳しくは以下の記事などが参考になります。
【JavaScript入門】4つのパターンで理解する正規表現の使い方まとめ! | 侍エンジニアブログ (sejuku.net)
初心者歓迎!手と目で覚える正規表現入門・その1「さまざまな形式の電話番号を検索しよう」 – Qiita
以下「事前準備」の例文
Dim re As RegExp ’正規表現クラスオブジェクト
Set re = New RegExp
’検索対象文字列
Dim s As String
s = “abc980”
’検索条件設定
re.Global = True ’検索範囲(True:文字列の最後まで検索)
re.IgnoreCase = True ‘大文字小文字の区別(True:区別しない)
re.Pattern = “\d” ’検索パターン”
2)メソッドの実行について : RegExpの3つのメソッド
①Test : 存在チェック
patternで設定した検索パターンが対象文字列に含まれるかどうかをBoolean型で返す。
含まれる場合はTrue、含まれない場合はFalse.
Test(検索文字列)
例)(patternは上記で設定した”\d”。「\d」は数字)
MsgBox ”判定: ” & re.Test(”abc980”)

②Replace : 置換
patternで設定した検索パターンにヒットした部分を「置換後文字列」に置換する。
Replace(検索文字列 , 置換後文字列)
例)(patternは上記で設定した”\d”。「\d」は数字1文字)
MsgBox “置換: ” & re/Replace(”abc980”,”X”)

③ Excute : 検索
patternで設定した検索パターンにヒットした部分をMatchesCollectionに返す。
Excute(検索文字列)→ MatchesCollection に返す。
たとえば5個ヒットしたら、コレクションはアイテムが5こできる。
例)(patternは上記で設定した”\d”。「\d」は数字)
‘検索結果を受け取るMatchesコレクション
Dim vMatches As MatchCollection
‘検索実行
Set vMatches = re.Execute(s)
‘コレクションをループ
Dim i As Long, cnt As Long
cnt = vMatches.Count ‘コレクションの数
For i = 0 To cnt – 1
Debug.Print “コレクション” & i & “:” & vMatches.Item(i)
Next
結果(イミディエイトウインドウ)
コレクション0:9
コレクション1:8
コレクション2:0

以下の記事を参考とさせていただきました。
とてもわかりやすく書かれています。
VBAで正規表現(RegExp)を利用する | Excel作業をVBAで効率化 (vbabeginner.net)
コメント