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の参照設定や使い方に関する解説を追加しました。
