〖ExcelVBA〗住所から都道府県名だけを抽出するマクロ|47都道府県に対応した実用的な方法

ExcelVBA

名簿や顧客リストなどにある「住所」から、都道府県だけを取り出したい場面はとても多いです。
しかし Excel 関数だけでは精度が低く、手作業では時間がかかります。

そこで今回は、住所から正確に都道府県名だけを抽出できる ExcelVBA マクロをご紹介します。

このマクロは、47都道府県すべてに対応し、住所の書き方が異なっていても高精度で抽出できます。

また別の記事で、郵便番号から住所を自動表示させるマクロを紹介しています。
こちらもぜひご覧ください。

〖ExcelVBA〗郵便番号データベース(CSV)を使って住所を自動検索するマクロ|日本郵便のデータに対応
Excelで郵便番号を入力したら、自動で住所(都道府県・市区町村・町域)を表示したい。そんな業務はとても多いですよね。そこで本記事では、日本郵便が公開している郵便番号データベース(CSV) を使い、 郵便番号から住所を検索する ExcelV...
スポンサーリンク
スポンサーリンク

目次

住所データの準備

今回の例では、次のように 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 列に出力します。

応用テクニック

① 住所が「市」から始まっている場合も判定したい

不動産データ・古い名簿などでは、

新宿区西新宿〜

のように都道府県が省略されているケースがあります。 この場合は別途「市区町村データベース」が必要になります。

ご希望であれば、全国の市区町村にも対応した上級版も作成できます。

② 列を追加して「市区町村」も抽出可能

住所から – 都道府県 – 市区町村 をそれぞれ抽出する記事を別で書くこともできます。

③ 住所の表記揺れを修正(全角・半角、スペース除去)

抽出精度をさらに上げたい場合は、前処理で住所を正規化する方法もあります。

実行手順

  1. 住所データが入ったシート(例:住所一覧)を準備
  2. Alt + F11 で VBE を開く
  3. 「挿入」→「標準モジュール」を選択
  4. 今回のコードを貼り付ける
  5. 「CreatePrefecture」などの名前に変更してもOK
  6. Excel 画面に戻り、開発タブ → マクロ実行

これだけで、住所から都道府県だけを高速で抽出できます。 大量の住所データの整理に非常に役立つマクロです。

まとめ:都道府県抽出はVBAで一瞬

今回のマクロのポイントは以下のとおりです。

  • 47都道府県リストを使うことで高精度の抽出が可能
  • 住所の先頭一致を判定するため誤検出が少ない
  • 大量データでも高速に処理可能

名簿整理、顧客管理、配送データなど、 都道府県ごとの分類が必要な業務で非常に活躍するマクロです。
ぜひ実務に取り入れてみてください!

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

タイトルとURLをコピーしました