Excel VBA | Cells を使った「住所を都道府県・市区町村・番地に3分割する」完全版の応用例

VBA
スポンサーリンク

顧客リストやアンケートデータを整理するときに、住所を「都道府県」「市区町村」「番地以降」に分割すると、地域別集計や配送業務がとても効率化されます。
ここでは VBA を使って A列の住所を自動的に3分割して B列〜D列に出力する例を紹介します。


コード例

Sub SplitAddress()
    Dim i As Long, lastRow As Long
    Dim addr As String, prefecture As String, city As String, street As String
    
    ' 都道府県リスト(47都道府県)
    Dim prefectures As Variant
    prefectures = Array("北海道", "青森県", "岩手県", "宮城県", "秋田県", "山形県", "福島県", _
                        "茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県", _
                        "新潟県", "富山県", "石川県", "福井県", "山梨県", "長野県", _
                        "岐阜県", "静岡県", "愛知県", "三重県", _
                        "滋賀県", "京都府", "大阪府", "兵庫県", "奈良県", "和歌山県", _
                        "鳥取県", "島根県", "岡山県", "広島県", "山口県", _
                        "徳島県", "香川県", "愛媛県", "高知県", _
                        "福岡県", "佐賀県", "長崎県", "熊本県", "大分県", "宮崎県", "鹿児島県", "沖縄県")
    
    ' A列の最終行を取得
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 1 To lastRow
        addr = Cells(i, 1).Value
        prefecture = ""
        city = ""
        street = ""
        
        If addr <> "" Then
            Dim j As Long
            For j = LBound(prefectures) To UBound(prefectures)
                If InStr(addr, prefectures(j)) = 1 Then
                    ' 都道府県を抽出
                    prefecture = prefectures(j)
                    
                    ' 都道府県を削除して残りを取得
                    Dim rest As String
                    rest = Mid(addr, Len(prefecture) + 1)
                    
                    ' 市区町村を抽出(「市」「区」「町」「村」まで)
                    Dim pos As Long
                    pos = InStr(rest, "市")
                    If pos = 0 Then pos = InStr(rest, "区")
                    If pos = 0 Then pos = InStr(rest, "町")
                    If pos = 0 Then pos = InStr(rest, "村")
                    
                    If pos > 0 Then
                        city = Left(rest, pos)
                        street = Mid(rest, pos + 1)
                    Else
                        city = "不明"
                        street = rest
                    End If
                    
                    Exit For
                End If
            Next j
        End If
        
        ' B列〜D列に出力
        Cells(i, 2).Value = prefecture   ' 都道府県
        Cells(i, 3).Value = city         ' 市区町村
        Cells(i, 4).Value = street       ' 番地以降
    Next i
End Sub
VB

解説

  • 都道府県リストを配列に用意 → 住所の先頭から判定
  • Mid(addr, Len(prefecture)+1) → 都道府県を削除して残りを取得
  • InStr(rest, "市" / "区" / "町" / "村") → 市区町村の終わりを探す
  • Left(rest, pos) → 市区町村部分を抽出
  • Mid(rest, pos+1) → 番地以降を抽出

実行イメージ

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

応用ポイント

  • 正規表現を使う → 「郡」「丁目」「番地」「号」など細かい区切りにも対応可能
  • 郵便番号と組み合わせ → 郵便番号から住所を補完して分割
  • 別シートに保存 → 元データを残しつつ、分割データを管理

💡 この「3分割処理」を使えば、都道府県別・市区町村別の集計や配送ラベル作成が一気に効率化できます。

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