VBA 文字列検索・置換に役立つ正規表現の使用例

Tag:

文字列の検索・置換を行うには、正規表現の利用が欠かせません。
VBAで正規表現を使うには、RegExpオブジェクトを利用します。
ここでは、RegExpオブジェクトの使用例を紹介します。

正規表現 サンプルコード

では、VBAのコードを見てみましょう。
次に示すコードでは、
(1) Cells(1,1)に入力された文字列の中に指定パターンと一致する文字列が存在するかチェック
(2) 一致した文字列をメッセージボックスに表示
といった処理を行います。

Sub 正規表現()
    Set reg = CreateObject("VBscript.RegExp")

    With reg
        .Pattern = "<tr>[\s\S]*?</tr>"   'パターン設定
        .IgnoreCase = False              '大文字小文字を区別
        .Global = True                   '文字列全体を検索
    End With
    
    Set mc = reg.Execute(Cells(1, 1))
    If mc.Count = 0 Then
        MsgBox "一致する文字列はありません"
    Else
        i = 0
        For Each Match In mc
            i = i + 1
            MsgBox i & "番目に一致した文字列:" & vbCrLf & Match.Value
        Next
    End If
    Set reg = Nothing
End Sub

次のようにパターンを設定しています。

.Pattern = "<tr>[\s\S]*?</tr>"   'パターン設定

[\s\S]*? の部分は正規表現独特の書き方です。
次のような意味となります。

シンボル 意味
\s\S 改行を含む任意の1文字
(「.」だと改行を除く任意の1文字となります)
[ ] “[ ]” 内に含まれている文字にマッチ
* 0個以上の直前の文字にマッチ
? 0個または1個の直前の文字にマッチ

実行結果

Excelの1行1列目に次の文字列を入力して下さい。

<table>
  <thead>
    <tr>
      <th>名前</th>
      <th>年齢</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>山田</td>
      <td>34</td>
    </tr>
    <tr>
      <td>高橋</td>
      <td>40</td>
    </tr>
  </tbody>
</table>

文字列入力後に実行させると次のようなメッセージボックスが表示されます。
vba_reg1

vba_reg2

vba_reg3

スポンサーリンク