VBAで自動化 VBA一覧 抽出・検索処理 正規表現

【VBA】正規表現:Matchオブジェクトの使い方

Excel VBAでは、正規表現を使用して文字列内の特定のパターンに一致する部分を検索・抽出する際、Matchオブジェクトが重要な役割を果たします。検索した結果、一致した文字列に関する情報を提供します。Excel VBAでMatchオブジェクトを使用して、正規表現の一致部分を取得・操作する方法について説明します。

Matchオブジェクトとは?

Matchオブジェクトは、正規表現のExecuteメソッドで一致した部分を折りたたむオブジェクトです。Executeメソッドを検索した結果、一致したすべての部分はコレクションとしてMatchesで返されます。このコレクションの各要素がMatchオブジェクトであり、使用して個々の部分一致に関する情報(一致した文字列、開始位置、長さなど)を提供します。【VBA】正規表現:Executeメソッドの使い方

Matchオブジェクトのプロパティ

Matchオブジェクトには、以下のようなプロパティがあり、検索結果に関する情報を取得できます。


  • 一致した文字列の特徴。
  • FirstIndex
    一致した文字列の開始位置(0ベース)。
  • 長さ
    一致した文字列の長さ。

Matchオブジェクトの使用例

Matchオブジェクトを使用するためには、まず正規表現オブジェクトを作成し、Executeメソッドを使用して検索を実行します。その後、コレクションの各Matchオブジェクトにアクセスすることで、一致した部分を操作できます。

【使用例: 文字列から電話番号を抽出し、Matchオブジェクトで詳細を取得する】

Sub ExtractPhoneNumberWithDetails()

Dim regEx As Object
Dim matches As Object
Dim match As Object
Dim text As String
Dim pattern As String
Dim result As String

' 正規表現オブジェクトを作成
Set regEx = CreateObject("VBScript.RegExp")

' パターンと対象文字列を設定
pattern = "\d{3}-\d{3}-\d{4}" ' 電話番号の形式
text = "Call 123-456-7890 or 987-654-3210."

' 正規表現のパターンを設定
regEx.Pattern = pattern
regEx.IgnoreCase = True
regEx.Global = True

' パターンに一致する部分を検索
Set matches = regEx.Execute(text)

' 各一致部分(Matchオブジェクト)について情報を取得
For Each match In matches

result = result & "一致した文字列: " & match.Value & vbCrLf
result = result & "開始位置: " & match.FirstIndex & vbCrLf
result = result & "文字列の長さ: " & match.Length & vbCrLf & vbCrLf

Next match

' 結果をメッセージボックスで表示
MsgBox result

End Sub

Executeメソッドを使って文字列から電話番号のパターン(例: 123-456-7890)を抽出し、Matchオブジェクト一致した電話番号の詳細(文字列、開始位置、長さ)を取得しています。ボックスで表示されます。

Matchオブジェクトの応用例

Matchオブジェクトを使用することで、正規表現によって得られた一致部分をさらに操作し、効率的にデータを処理することができます。

一致部分をセルに出力する

次の例では、テキスト内の一致部分(電話番号)を取得し、それをExcelのシートに出力します。

Sub OutputMatchesToCells()

Dim regEx As Object
Dim matches As Object
Dim match As Object
Dim text As String
Dim pattern As String
Dim i As Integer

' 正規表現オブジェクトを作成
Set regEx = CreateObject("VBScript.RegExp")

' パターンと対象文字列を設定
pattern = "\d{3}-\d{3}-\d{4}" ' 電話番号の形式
text = "Call 123-456-7890 or 987-654-3210."

' 正規表現のパターンを設定
regEx.Pattern = pattern
regEx.IgnoreCase = True
regEx.Global = True

' パターンに一致する部分を検索
Set matches = regEx.Execute(text)

' 各一致部分をセルに出力
i = 1
For Each match In matches

Cells(i, 1).Value = match.Value ' A列に一致した文字列を出力
Cells(i, 2).Value = match.FirstIndex ' B列に開始位置を出力
Cells(i, 3).Value = match.Length ' C列に文字列の長さを出力
i = i + 1

Next match

End Sub

一致した電話番号をExcelのシートに出力します。具体的には、A列に一致した文字列、B列に開始位置、C列に文字列の長さが出力されます。

複数の一致部分をカウントする

次の例では、文字列内の数字のセット(例: 123)をすべて検索し、その数を数えます。

Sub CountMatches()

Dim regEx As Object
Dim matches As Object
Dim text As String
Dim pattern As String

' 正規表現オブジェクトを作成
Set regEx = CreateObject("VBScript.RegExp")

' パターンと対象文字列を設定
pattern = "\d{3}" ' 3桁の数字
text = "123 and 456 and 789 are numbers."

' 正規表現のパターンを設定
regEx.Pattern = pattern
regEx.IgnoreCase = True
regEx.Global = True

' パターンに一致する部分を検索
Set matches = regEx.Execute(text)

' 一致部分の数をメッセージボックスで表示
MsgBox "一致部分の数: " & matches.Count

End Sub

文字列に含まれる3桁の数字をすべて検索し、その数を表示します。コレクションのプロパティを使用して、Matches一致Countした部分の数を取得します。【VBA】正規表現:Patternプロパティの使い方

Matchオブジェクトの注意点

  • ゼロベースのインデックス
    Match.FirstIndexは、ゼロベース(最初の文字が0)で一致する部分の開始位置を示します。Excelのセル番号などに反映させる場合は、1を足して処理する必要があります。
  • 一致部分がない場合
    Executeメソッドを使っても、一致部分がない場合、Matches.Countは0になります。これを事前に確認して処理を行うことが推奨されます。

まとめ

Excel VBA におけるMatchオブジェクトを活用することで、正規表現による文字列検索の結果を詳細に扱うことができます。一致した文字列や開始位置、長さといった情報を取得することで、より精度の高い処理が可能になります。

【VBA】正規表現オブジェクト作成・検索・抽出

-VBAで自動化, VBA一覧, 抽出・検索処理, 正規表現