管理人Kのひとりごと

デジモノレビューやプログラミングや写真など

ExcelVBAで正規表現(パターンマッチした文字列を抽出)

ExcelVBAで正規表現を使って対象文字列から特定パターンに合致する文字列を抽出する。

やりたいこと

下の文字列から「1868」のような数字4桁を抽出する

明治 1868/10/23~1912/7/29
大正 1912/7/30~1926/12/24
昭和 1926/12/25~1989/1/7
平成 1989/1/8~2019/4/30
令和 2019/5/1~

ソースコード

バージョン1909

Option Explicit

Function 西暦年を取得する(日付セル)
    Dim regex As Object
    Dim strPattern As String
    Dim matches
    Dim i As Integer
    Dim retStr As String
    
    ' 西暦年(数字4字)を抽出パターンに設定
    strPattern = "\d\d\d\d"
    
    Set regex = CreateObject("VBScript.RegExp")
    With regex
        .Pattern = strPattern
        .Global = True '文字列全体を検索対象にする
    End With
    
    ' パターンにマッチする文字列を抽出して連結
    Set matches = regex.Execute(日付セル)
    If matches.Count > 0 Then
        For i = 0 To matches.Count - 1
            retStr = retStr & matches(i).Value & ","
        Next
    End If
    ' 末尾の','を削除
    retStr = Left(retStr, Len(retStr) - 1)

    Set matches = Nothing
    Set regex = Nothing
    
    西暦年を取得する = retStr
End Function

実行結果

明治 1868/10/231912/7/29
大正 1912/7/30~1926/12/24
昭和 1926/12/25~1989/1/7
平成 1989/1/8~2019/4/30
令和 2019/5/1~

=西暦年を取得する(A1)
1868,1912,1912,1926,1926,1989,1989,2019,2019