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 rEnd Sub
‘[引数]
‘RegExpr:正規表現パターン
‘InputStr:検索文字列
‘[返り値]
‘InputStr内にRegExprが見つかった場合:抽出した文字列を返す(複数の場合はカンマ区切り)
‘InputStr内にRegExprが見つからなかった場合:""を返す。
Function GetData(RegExpr As String, InputStr As String) As StringDim re As RegExp
Set re = New RegExp
Dim mc As MatchCollection
Dim m As Matchre.Global = True ‘複数マッチを有効にする。
re.IgnoreCase = False ‘大文字と小文字を区別すると False、区別しないと True です。既定値は False
re.MultiLine = False ‘multiline が false のとき、"^" で文字列の先頭位置に一致し、"$" で文字列の最終位置に一致します。
‘multiline が true のとき、"^"で、"\n" または "\r" の直後を含む文字列の先頭位置に一致し、"$" で、"\n" または "\r" の直前を含む文字列の最終位置に一致します。
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
End If
End Function
コメント