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

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

Excel VBAの正規表現を使用することで、特定のパターンに基づいて文字列を検索、置換、抽出するための手法です。正規表現を利用するには、VBScript.RegExpオブジェクトを作成する必要があります。この記事では、Excel VBAで正規表現オブジェクトを作成し、さまざまな文字列操作を行う方法について説明します。

Excel VBAで正規表現オブジェクトを作成・使用する方法

正規表現オブジェクトを作成する

Excel VBAでは、VBScript.RegExpオブジェクトを使用して正規表現を実装します。このオブジェクトは、正規表現の検索や置換、抽出に使用されます。

【使用例: 正規表現オブジェクトの作成】

Sub CreateRegExpObject()

Dim regEx As Object

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

' オブジェクトの設定
regEx.IgnoreCase = True ' 大文字・小文字を無視
regEx.Global = True ' すべての一致を検索

End Sub

CreateObject("VBScript.RegExp")を使用して正規表現オブジェクトを作成し、IgnoreCaseプロパティで大文字・小文字の区別を無視する設定、Globalプロパティで文字列全体を検索する設定を行っています。

正規表現を使用した検索

正規表現を使って文字列内で特定のパターンに一致する部分を検索するには、Patternプロパティに検索パターンを指定し、Testメソッドを使用します。Testメソッドは、指定したパターンが文字列に存在するかを判断し、TrueまたはFalseを返します。【VBA】正規表現:Testメソッドの扱い方

【VBA】正規表現:Patternプロパティの使い方

【使用例: パターンに一致するかどうかを調べる】

Sub TestRegExp()

Dim regEx As Object
Dim text As String
Dim pattern As String
Dim result As Boolean

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

' 検索パターンと対象文字列を指定
pattern = "\d{3}-\d{3}-\d{4}" ' 電話番号の形式 (例: 123-456-7890)
text = "My phone number is 123-456-7890."

' パターンを設定
regEx.Pattern = pattern
regEx.IgnoreCase = True
regEx.Global = True

' パターンに一致するかを調べる
result = regEx.Test(text)

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

MsgBox "電話番号が見つかりました。"

Else

MsgBox "電話番号は見つかりませんでした。"

End If

End Sub

指定したパターン(電話番号の形式 \d{3}-\d{3}-\d{4})が文字列内に存在するかどうかを調べています。見つかった場合は「電話番号が見つかりました」と表示されます。

正規表現を使用した文字列の置換

正規表現を使用して文字列内の特定のパターンに一致する部分を置換するには、Replaceメソッドを使用します。Replaceメソッドは、パターンに一致する部分を指定した文字列に置き換えます。

【VBA】Replace関数で空白のスペースを削除する方法

【使用例: 文字列の置換】

Sub ReplaceTextWithRegExp()

Dim regEx As Object
Dim text As String
Dim pattern As String
Dim replacedText As String

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

' 検索パターンと対象文字列を指定
pattern = "\s+" ' 1つ以上のスペース
text = "Excel VBA is powerful"

' パターンを設定
regEx.Pattern = pattern
regEx.IgnoreCase = True
regEx.Global = True

' パターンに一致する部分を置換
replacedText = regEx.Replace(text, " ")

' 結果をメッセージボックスで表示
MsgBox replacedText ' "Excel VBA is powerful"

End Sub

複数のスペースを1つのスペースに置き換えています。Patternで「1つ以上のスペース」を指定し、Replaceメソッドで一致するスペース部分を単一のスペースに置換しています。

正規表現を使用した文字列の抽出

正規表現を使って、文字列内の特定のパターンに一致する部分を抽出するには、Executeメソッドを使用します。Executeメソッドは、パターンに一致するすべての部分をMatchオブジェクトとして返します。【VBA】正規表現:Executeメソッドの使い方

【使用例: 文字列からパターンに一致する部分を抽出】

Sub ExtractMatchesWithRegExp()

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 = "Contact me at 123-456-7890 or 987-654-3210."

' パターンを設定
regEx.Pattern = pattern
regEx.IgnoreCase = True
regEx.Global = True

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

' 抽出結果を結合
For Each match In matches

result = result & match.Value & vbCrLf

Next match

' 結果をメッセージボックスで表示
MsgBox "見つかった電話番号:" & vbCrLf & result

End Sub

指定されたテキスト内のすべての電話番号形式(123-456-7890のような形式)を抽出し、結果をメッセージボックスで表示します。

正規表現のプロパティとメソッド

正規表現オブジェクトには、さまざまなプロパティとメソッドがあります。

  • Pattern
    検索パターンを指定します(例: "^\d{3}-\d{3}-\d{4}$")。
  • IgnoreCase
    大文字と小文字を区別しない場合はTrue、区別する場合はFalse(デフォルト)。
  • Global
    文字列全体を検索する場合はTrue(デフォルト)、最初に一致した部分のみ検索する場合はFalse。
  • Test
    指定したパターンが文字列に一致するかどうかをTrueまたはFalseで返します。
  • Replace
    パターンに一致する部分を指定した文字列に置換します。
  • Execute
    パターンに一致するすべての部分をMatchオブジェクトとして返します。

まとめ

Excel VBAで正規表現を使用することで、複雑な文字列操作を簡単に行うことができます。特定のパターンに基づく検索、置換、抽出などが効率的にできるため、データ解析や文字列のクリーニングに役立ちます。

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