【EXCEL VBA】正規表現関連サンプルコード

VBA・Officeカテゴリを表すパンダのイラスト VBA・Office

Excel VBAで正規表現を利用して文字列の検索や抽出を行うためのサンプルコードと解説です。VBA標準の関数だけでは対応しにくい高度なパターンマッチングを、VBScriptの正規表現オブジェクト(RegExp)を使って実現します。

前提条件

このコードを使用するには、VBE(Visual Basic Editor)のメニューから「ツール」>「参照設定」を開き、「Microsoft VBScript Regular Expressions 5.5」にチェックを入れる必要があります。(※事前バインディングを使用しているため、参照設定を行ってください)

サンプルコード

Sub test()
    Dim r As Range
    Dim str As String
    For Each r In Range("B2:B2000")
        str = r.Value
        r.Offset(0, 1).Value = GetData("[A-Z0-9]{8}", r.Value)
    Next r
End Sub

'
' [引数]
' RegExpr:正規表現パターン
' InputStr:検索文字列
' [返り値]
' InputStr内にRegExprが見つかった場合:抽出した文字列を返す(複数の場合はカンマ区切り)
' InputStr内にRegExprが見つからなかった場合:""を返す。
'
Function GetData(RegExpr As String, InputStr As String) As String
    Dim re As RegExp
    Set re = New RegExp
    Dim mc As MatchCollection
    Dim m As Match

    re.Global = True      ' 複数マッチを有効にする
    re.IgnoreCase = False ' 大文字と小文字を区別する場合はFalse
    re.MultiLine = False  ' 複数行モード
    re.Pattern = RegExpr
    
    Set mc = re.Execute(InputStr)
    If mc.Count = 0 Then
        GetData = ""
    ElseIf mc.Count = 1 Then
        Set m = mc(0)
        GetData = m.Value
    Else
        For Each m In mc
            GetData = GetData & m.Value & ","
        Next m
        ' 末尾のカンマを削除する場合の調整(必要に応じて有効化)
        If Len(GetData) > 0 Then
            GetData = Left(GetData, Len(GetData) - 1)
        End If
    End If
End Function

使い方とポイント

  • RegExpオブジェクトの生成: New RegExp を使用して正規表現エンジンをインスタンス化しています。
  • Globalプロパティ: True に設定することで、文字列内から条件に一致するすべての部分を抽出します。
  • 複数一致の処理: 一致した複数の文字列はカンマ区切りで連結されます。

この記事の更新履歴

この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。

2026年9月12日

  • 変更HTMLタグと引用ブロックで崩れていたコード表現を、適切なコードブロック構造に修正しました。
  • 追加VBScript Regular Expressions 5.5の参照設定や使い方に関する解説を追加しました。

文書情報

記事タイトル
【EXCEL VBA】正規表現関連サンプルコード
作成日
更新日
Source URL
https://papanda925.com/?p=490

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました