住所データを「都道府県」「市区町村」「町名・番地」に分割するサンプルコードを紹介します。
実務でよくある「住所を3分割」する処理の基本形です。
サンプルコード(住所を3分割)
Sub SplitAddress3Parts()
Dim lastRow As Long
Dim i As Long
Dim addr As String
Dim pos As Long
Dim pref As String, city As String, town As String
Dim keyWords As Variant, k As Variant
' A列に住所が入っている想定
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' 都道府県を判定するキーワード
keyWords = Array("都", "道", "府", "県")
For i = 2 To lastRow
addr = Cells(i, 1).Value
' 都道府県を抽出
For Each k In keyWords
pos = InStr(addr, k)
If pos > 0 And pos < 5 Then
pref = Left(addr, pos)
addr = Mid(addr, pos + 1)
Exit For
End If
Next k
' 市区町村を抽出(「市」「区」「町」「村」で判定)
pos = 0
pos = InStr(addr, "市")
If pos = 0 Then pos = InStr(addr, "区")
If pos = 0 Then pos = InStr(addr, "町")
If pos = 0 Then pos = InStr(addr, "村")
If pos > 0 Then
city = Left(addr, pos)
town = Mid(addr, pos + 1)
Else
city = addr
town = ""
End If
' 出力(B列:都道府県、C列:市区町村、D列:町名・番地)
Cells(i, 2).Value = pref
Cells(i, 3).Value = city
Cells(i, 4).Value = town
Next i
End Sub
VB✅ 実行例
| A列(住所) | B列(都道府県) | C列(市区町村) | D列(町名・番地) |
|---|---|---|---|
| 東京都江東区豊洲1-1-1 | 東京都 | 江東区 | 豊洲1-1-1 |
| 大阪府大阪市北区梅田1-2-3 | 大阪府 | 大阪市北区 | 梅田1-2-3 |
| 福井県三方郡美浜町△△1-1-1 | 福井県 | 三方郡美浜町 | △△1-1-1 |
💡 応用ポイント
- 郡や町村の判定を強化する場合は、市区町村のマスタデータを参照すると精度が上がります。
- 郵便番号付き住所は、先に
Replaceで数字や記号を除去してから処理すると安定。 - 建物名や部屋番号まで分割したい場合は、さらに正規表現(
LikeやVBScript.RegExp)を使うと便利です。
