名簿や顧客リストなどにある「住所」から、都道府県だけを取り出したい場面はとても多いです。
しかし Excel 関数だけでは精度が低く、手作業では時間がかかります。
そこで今回は、住所から正確に都道府県名だけを抽出できる ExcelVBA マクロをご紹介します。
このマクロは、47都道府県すべてに対応し、住所の書き方が異なっていても高精度で抽出できます。
また別の記事で、郵便番号から住所を自動表示させるマクロを紹介しています。
こちらもぜひご覧ください。

目次
住所データの準備
今回の例では、次のように A 列に住所が入っているとします。
シート名は「住所一覧」に変更してください。

B列に、抽出された都道府県を自動で記入していきます。
都道府県抽出マクロ(コピペOK)
以下のコードを 標準モジュール に貼り付けるだけで使えます。

Option Explicit
' 住所から都道府県だけを抽出するマクロ
Sub ExtractPrefecture()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim address As String
Dim prefecture As String
' 47都道府県リスト
Dim prefs As Variant
prefs = Array("北海道", "青森県", "岩手県", "宮城県", "秋田県", "山形県", "福島県", _
"茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県", _
"新潟県", "富山県", "石川県", "福井県", "山梨県", "長野県", _
"岐阜県", "静岡県", "愛知県", "三重県", _
"滋賀県", "京都府", "大阪府", "兵庫県", "奈良県", "和歌山県", _
"鳥取県", "島根県", "岡山県", "広島県", "山口県", _
"徳島県", "香川県", "愛媛県", "高知県", _
"福岡県", "佐賀県", "長崎県", "熊本県", "大分県", "宮崎県", "鹿児島県", _
"沖縄県")
Set ws = Worksheets("住所一覧") ' ← シート名は必要に応じて変更
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
address = ws.Cells(i, 1).Value
prefecture = ""
Dim p As Variant
For Each p In prefs
If InStr(address, p) = 1 Then
prefecture = p
Exit For
End If
Next p
ws.Cells(i, 2).Value = prefecture
Next i
MsgBox "都道府県の抽出が完了しました!", vbInformation
End Sub
コードのポイント解説
① 47都道府県を配列化して高速検索
prefs = Array("北海道", "青森県", "岩手県", ...)
都道府県リストは配列で持っておくことで、精度の高い判定と高速処理が可能になります。
② InStr を使って「住所の先頭」に都道府県名があるか判定
If InStr(address, p) = 1 Then
住所は基本的に「都道府県」から始まるため、 先頭一致(=1)だけを拾うことで誤判定を防ぎます。
③ 該当があればそのまま B 列へ書き出し
ws.Cells(i, 2).Value = prefecture
都道府県が見つかったら、その行の B 列に出力します。
応用テクニック
① 住所が「市」から始まっている場合も判定したい
不動産データ・古い名簿などでは、
新宿区西新宿〜
のように都道府県が省略されているケースがあります。 この場合は別途「市区町村データベース」が必要になります。
ご希望であれば、全国の市区町村にも対応した上級版も作成できます。
② 列を追加して「市区町村」も抽出可能
住所から – 都道府県 – 市区町村 をそれぞれ抽出する記事を別で書くこともできます。
③ 住所の表記揺れを修正(全角・半角、スペース除去)
抽出精度をさらに上げたい場合は、前処理で住所を正規化する方法もあります。
実行手順
- 住所データが入ったシート(例:住所一覧)を準備
- Alt + F11 で VBE を開く
- 「挿入」→「標準モジュール」を選択
- 今回のコードを貼り付ける
- 「CreatePrefecture」などの名前に変更してもOK
- Excel 画面に戻り、開発タブ → マクロ実行
これだけで、住所から都道府県だけを高速で抽出できます。 大量の住所データの整理に非常に役立つマクロです。
まとめ:都道府県抽出はVBAで一瞬
今回のマクロのポイントは以下のとおりです。
- 47都道府県リストを使うことで高精度の抽出が可能
- 住所の先頭一致を判定するため誤検出が少ない
- 大量データでも高速に処理可能
名簿整理、顧客管理、配送データなど、 都道府県ごとの分類が必要な業務で非常に活躍するマクロです。
ぜひ実務に取り入れてみてください!


コメント