住所データを「都道府県」と「市区町村」に分割するには、VBAで文字列操作関数(Left、Mid、InStr など)を組み合わせるのが基本です。
以下に実務で使えるサンプルコードを紹介します。
サンプルコード:住所を都道府県と市区町村に分割
Sub SplitAddress()
Dim lastRow As Long
Dim i As Long
Dim addr As String
Dim pos As Long
Dim pref As String
Dim city As String
Dim keyWords As Variant
Dim 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)
city = Mid(addr, pos + 1)
Exit For
End If
Next k
' 結果をB列・C列に出力
Cells(i, 2).Value = pref
Cells(i, 3).Value = city
Next i
End Sub
VB📝 処理の流れ
- 住所データをA列に入力(例:「東京都江東区豊洲1-1-1」)
Array("都","道","府","県")を使って都道府県の終端を判定Leftで都道府県を抽出、Midで残りを市区町村として抽出- B列に都道府県、C列に市区町村を出力
✅ 実行例
| A列(住所) | B列(都道府県) | C列(市区町村以降) |
|---|---|---|
| 東京都江東区豊洲1-1-1 | 東京都 | 江東区豊洲1-1-1 |
| 大阪府大阪市北区梅田1-2-3 | 大阪府 | 大阪市北区梅田1-2-3 |
| 北海道札幌市中央区大通西1 | 北海道 | 札幌市中央区大通西1 |
💡 応用ポイント
- 「郡」や「町村」まで分割したい場合は、さらに辞書データを用意して判定を強化
- 郵便番号付き住所は、先に
Replaceで数字や記号を除去してから処理すると精度UP - 市区町村ごとにシート分割する応用マクロも可能
