「+81」または「81」で始まる日本の国番号付き電話番号を、国内表記の「0」に変換する関数

タイトルの関数は、以下です。

'********************************************************
'* 関数名: ReplaceCountryCodeWithZero
'* 説明  : 「+81」または「81」で始まる日本の国番号付き電話番号を、国内表記の「0」に変換します。
'*         例: "+819012345678" → "09012345678"
'*
'* 引数:
'*   strTarget [String] - 処理対象の電話番号文字列
'*
'* 戻り値:
'*   [String] - 変換後の文字列(先頭の「+81」または「81」が「0」に置換された結果)
'*
'* 注意点:
'*   - 先頭が「+81」または「81」の場合のみ変換対象です。
'*   - 中間に現れる「81」は変換されません。
'*   - 正規表現を使用するため、参照設定で「Microsoft VBScript Regular Expressions 5.5」を有効にしてください。
Function ReplaceCountryCodeWithZero(ByVal strTarget As String) As String
    Dim strPattern As String             ' 正規表現パターンを格納する変数
    Dim objRegEx As New RegExp           ' 正規表現オブジェクト

    ' 正規表現パターンの定義
    ' ^      : 文字列の先頭
    ' (\+81|81) : 「+81」または「81」に一致する
    strPattern = "^(\+81|81)"

    ' 正規表現オブジェクトのプロパティを設定
    objRegEx.Pattern = strPattern        ' パターンを設定
    objRegEx.Global = False              ' 最初の一致のみ対象
    objRegEx.IgnoreCase = True           ' 大文字・小文字の区別を無視(念のため)

    ' 正規表現が一致するかをチェック
    If objRegEx.Test(strTarget) Then
        ' 一致部分(「+81」または「81」)を「0」に置換
        strTarget = Replace(strTarget, objRegEx.Execute(strTarget)(0).Value, "0")
    End If

    ' 正規表現オブジェクトの解放(メモリ管理)
    Set objRegEx = Nothing

    ' 変換結果を関数の戻り値として返す
    ReplaceCountryCodeWithZero = strTarget
End Function

✅ 使用例(結果)

入力出力
+81901234567809012345678
81901234567809012345678
0901234081809012340818(変化なし)

参考・補足

  • 正規表現の ^(\+81|81)「先頭に+81または81がある」 という条件で、国際番号の一部を日本の携帯番号形式に変換します。
  • StrReplace ではなく、RegExp.Execute().Item(0).Value を使って 最初のマッチだけを置換 するようにしています。
  • グローバル一致(全体置換)は不要なため、Global = False を明示。

Follow me!