Excel VBA | 正規表現で郵便番号を抽出して住所と分離する応用例

VBA
スポンサーリンク

顧客リストやアンケートデータでは「郵便番号+住所」が一緒に入力されているケースがよくあります。
例:〒123-4567 東京都江東区亀戸1-1-1
これを 郵便番号と住所に分離 すると、データベース化や郵送ラベル作成が効率化されます。


コード例

Sub ExtractPostalCodeAndAddress()
    Dim i As Long, lastRow As Long
    Dim addr As String
    Dim regex As Object
    Dim matches As Object
    
    ' 正規表現オブジェクトを作成
    Set regex = CreateObject("VBScript.RegExp")
    regex.IgnoreCase = False
    regex.Global = True
    
    ' パターン: 郵便番号(〒付きでもOK)+住所
    ' 郵便番号は「3桁-4桁」または「7桁数字」
    regex.Pattern = "〒?\s?(\d{3}-\d{4}|\d{7})\s*(.+)"
    
    ' A列の最終行を取得
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 1 To lastRow
        addr = Trim(Cells(i, 1).Value)
        
        If addr <> "" Then
            If regex.Test(addr) Then
                Set matches = regex.Execute(addr)
                Cells(i, 2).Value = matches(0).SubMatches(0) ' 郵便番号
                Cells(i, 3).Value = matches(0).SubMatches(1) ' 住所
            Else
                Cells(i, 2).Value = "不明"
                Cells(i, 3).Value = addr
            End If
        End If
    Next i
End Sub
VB

解説

  • 正規表現パターン
    • 〒? → 「〒」があってもなくてもOK
    • \d{3}-\d{4} → 3桁-4桁の郵便番号形式
    • |\d{7} → 7桁連続の数字形式
    • (.+) → 残りを住所としてキャプチャ
  • SubMatches(0) → 郵便番号
  • SubMatches(1) → 住所

実行イメージ

A列(元データ)B列(郵便番号)C列(住所)
〒123-4567 東京都江東区亀戸1-1-1123-4567東京都江東区亀戸1-1-1
9876543 大阪府大阪市北区梅田1-1-19876543大阪府大阪市北区梅田1-1-1
東京都江東区亀戸1-1-1不明東京都江東区亀戸1-1-1

応用ポイント

  • 郵便番号を数値化して検索キーに利用
  • 住所と郵便番号を別カラムに保存 → データベース化に最適
  • 郵便番号辞書と照合 → 実在するかチェック可能

💡 この処理を応用すれば「顧客リストから郵便番号を一括抽出して住所と分離」でき、配送や地域分析が効率化します。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました