VBAで正規表現を使う
込み入った検索では正規表現が便利ですが、VBAで使ったことなかったので、使い方を調べ、メモとして残しておきます。
作ったコードはこんな感じ。
Sub RegExpSample() '参照設定 Microsoft VBScript Regular Expressions 5.5 Dim myRegExp As RegExp Dim myPtn As String Dim myRange As Range Set myRegExp = New RegExp myPtn = "[0-9]" With myRegExp .Pattern = myPtn '検索パターン .IgnoreCase = True '大文字と小文字を区別しない .Global = True '全体を検索 For Each myRange In ActiveSheet.UsedRange If .Test(myRange.Formula) = True Then myRange.Interior.ColorIndex = 8 End If Next End With
コードを書く前に、Microsoft VBScript Regular Expressions 5.5の参照設定を行います。
複雑なVBAのコードを書く場合は、仕事に役立つ ExcelVBA実用サンプルコレクション 新装版 Excel徹底活用シリーズを参考にしていますが、ここの書き方ではうまくいかず。オブジェクトの設定等は、ネットで調べました。myRegExpは正規表現のオブジェクト、myPtnは正規表現で書かれたマッチングパターン、myRnageはループ用のRangeオブジェクト。
Dim myRegExp As RegExp Dim myPtn As String Dim myRange As Range
正規表現オブジェクトをセット。正規表現文字列は今回、[0-9]としています。
Set myRegExp = New RegExp myPtn = "[0-9]"
検索前のおまじない。myRegExpにパターンを設定し、検索設定も併せて設定。
With myRegExp .Pattern = myPtn .IgnoreCase = True .Global = True
いよいよ検索。今回は特定のRange範囲を設定し、マッチしたセルは背景色を変えています。Range全体を一気に検索はできないので、For Eachでループしています。
For Each myRange In ActiveSheet.UsedRange If .Test(myRange.Formula) = True Then myRange.Interior.ColorIndex = 8 End If Next
これで一応検索可能。