Excel VBAで正規表現のグループ化を使ってマッチ文字列を取得する

Excel VBAで正規表現のグループ化を使ってマッチ文字列を取得する

Posted at February 12,2014 1:55 AM
Tag:[Excel, VBA]

Excel VBAで正規表現のグループ化を使って、複数のマッチ文字列を取得する方法を紹介します。

1.はじめに

Excel VBAで正規表現を使って文字列をマッチさせる方法」では、文字列が正規表現にマッチしたかどうかの判定を行う方法を解説しました。

ただ、実際のプログラムでは判定だけでなく、マッチした文字列を取得して利用するケースが少なくないと思います。

ということで、正規表現のグループ化を使ったマッチ文字列の取得方法を紹介します。

こちらも元記事と同様、ネットで検索しても分かりやすいサンプルがなかったので、できるだけ無駄なものを省いたサンプルを使って説明したいと思います。

2.正規表現のグループ化を使って複数の文字列を取得する

ここでは「2014/02/22 12:34:56」という年月日時分秒を示す文字列から、すべての数字を抜き出すサンプルで解説します。

サンプルコードは次のとおりです。

Sub test()
    Dim str As String
    str = "2014/02/22 12:34:56"
    
    Dim regex
    Set regex = CreateObject("VBScript.RegExp")
    regex.Pattern = "(\d+)/(\d+)/(\d+) (\d+):(\d+):(\d+)"
    regex.Global = True
     
    Dim result
    Set result = regex.Execute(str)
    If result.Count > 0 Then
        Set result2 = result(0).SubMatches
        For i = 0 To result2.Count - 1
            MsgBox result2(i)
        Next
    End If
 
    Set regex = Nothing
End Sub

以下、解説です。

Excel VBAで正規表現を使って文字列をマッチさせる方法」と重複する部分については割愛しています。すいませんが元記事の解説を参照してください。

まず検索文字列に「2014/02/22 12:34:56」を設定します。

    Dim str As String
    str = "2014/02/22 12:34:56"

Patternプロパティに、正規表現でマッチさせたいパターンを設定します。ここでグループ化のためのカッコを付与します。

    regex.Pattern = "(\d+)/(\d+)/(\d+) (\d+):(\d+):(\d+)"

Executeメソッドで文字列マッチを実行したあと、結果はMatchesコレクションとして返却されるので、result.CountでMatchオブジェクトの個数を判定します。

    If result.Count > 0 Then
        …中略…
    End If

グループ化で文字列を取得するには、If文の中で、result(0)に対してSubMatchesを実行し、SubMatchesコレクションを取得します。

        Set result2 = result(0).SubMatches

SubMatchesコレクションには個別のサブマッチ文字列(ここではマッチした「2014」「02」「22」「12」「34」「56」)が格納されているので、あとはFor文で順番に取得すればOKです。

        For i = 0 To result2.Count - 1
            MsgBox result2(i)
        Next

MsgBoxには「2014」「02」「22」「12」「34」「56」の順で表示されます。

関連記事
zenback
人気エントリー
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)