Excel VBA | 正規表現を使ってより精度高く住所を分割する応用例

VBA
スポンサーリンク

住所を「都道府県」「市区町村」「番地以降」に分けるとき、単純な文字検索では限界があります。
正規表現(RegExp) を使うと、より柔軟で精度の高い分割が可能です。


コード例(住所を3分割)

Sub SplitAddressWithRegex()
    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
    
    ' パターン: 都道府県、市区町村、番地以降をキャプチャ
    ' 例: 東京都江東区亀戸1-1-1
    regex.Pattern = "^(北海道|青森県|岩手県|宮城県|秋田県|山形県|福島県|" & _
                    "茨城県|栃木県|群馬県|埼玉県|千葉県|東京都|神奈川県|" & _
                    "新潟県|富山県|石川県|福井県|山梨県|長野県|" & _
                    "岐阜県|静岡県|愛知県|三重県|" & _
                    "滋賀県|京都府|大阪府|兵庫県|奈良県|和歌山県|" & _
                    "鳥取県|島根県|岡山県|広島県|山口県|" & _
                    "徳島県|香川県|愛媛県|高知県|" & _
                    "福岡県|佐賀県|長崎県|熊本県|大分県|宮崎県|鹿児島県|沖縄県)" & _
                    "(.+?[市区町村])(.+)$"
    
    ' 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) ' 市区町村
                Cells(i, 4).Value = matches(0).SubMatches(2) ' 番地以降
            Else
                Cells(i, 2).Value = "不明"
                Cells(i, 3).Value = "不明"
                Cells(i, 4).Value = addr
            End If
        End If
    Next i
End Sub
VB

解説

  • 正規表現パターン
    • ^(都道府県) → 住所の先頭にある都道府県をキャプチャ
    • (.+?[市区町村]) → 市区町村名をキャプチャ(最短一致で「市」「区」「町」「村」まで)
    • (.+)$ → 残りを番地以降としてキャプチャ
  • SubMatches(0) → 都道府県
  • SubMatches(1) → 市区町村
  • SubMatches(2) → 番地以降

実行イメージ

A列(住所)B列(都道府県)C列(市区町村)D列(番地以降)
東京都江東区亀戸1-1-1東京都江東区亀戸1-1-1
神奈川県横浜市中区山下町1-1神奈川県横浜市中区山下町1-1
大阪府大阪市北区梅田1-1-1大阪府大阪市北区梅田1-1-1
福岡県福岡市博多区博多駅前1-1福岡県福岡市博多区博多駅前1-1

応用ポイント

  • 郡や丁目にも対応 → 正規表現を拡張すれば「郡」「丁目」「番地」「号」まで抽出可能
  • 郵便番号と組み合わせ → 郵便番号から住所を補完して分割
  • データベース化 → 都道府県・市区町村・番地を別カラムに保存して検索性を向上

💡 正規表現を使うと「住所のパターンが多少違っても柔軟に分割」できるので、実務でのデータクリーニングに非常に強力です。

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