【VBAリファレンス|実務向け】VBAで住所から「都道府県」をスマートに抽出するテクニック

スポンサーリンク

なぜこの処理が重要なのか

実務において、顧客リストや住所録を扱う際、「都道府県」と「それ以降の住所」を分けたいという要望は非常に多いです。しかし、日本の住所は「東京都(3文字)」のように短いものから、「神奈川県(4文字)」のように長いものまで混在しており、単純な文字数指定では抽出できません。VBAでこのロジックを自動化できれば、数千件のデータ処理も一瞬で完了し、ヒューマンエラーを劇的に減らすことができます。

基礎知識:InStr関数とInStrRev関数

VBAで文字列を操作する際、よく使われるのが「特定の文字が何文字目にあるか」を調べる関数です。
InStr関数は、文字列の先頭から検索を開始します。
Mid関数は、指定した位置から特定の文字数分を切り出します。
今回はこれらを組み合わせて、「県」という文字が3文字目にあるのか、4文字目にあるのかを判定する仕組みを作ります。

実装の解決策

「県」という文字は常に3文字目か4文字目にあるというルールに着目します。
1. まず、4文字目が「県」かどうかを判定します。
2. 4文字目が「県」なら左から4文字を抽出。
3. そうでなければ、左から3文字を抽出(都・道・府・県の3文字パターン)。
という条件分岐(If文)を実装するのが最も確実です。

サンプルプログラム

以下のコードは、アクティブシートのA列に住所が入力されていると仮定し、B列に都道府県を抽出するサンプルです。

Sub ExtractPrefecture()
Dim i As Long
Dim lastRow As Long
Dim address As String
Dim pref As String

‘ 最終行を取得してループ処理
lastRow = Cells(Rows.Count, 1).End(xlUp).Row

For i = 1 To lastRow
address = Cells(i, 1).Value

‘ 住所が空の場合はスキップ
If address <> “” Then
‘ 4文字目が「県」であるか判定
If Mid(address, 4, 1) = “県” Then
pref = Left(address, 4)
Else
‘ それ以外は「都・道・府」または3文字の「県」とみなして3文字抽出
pref = Left(address, 3)
End If

‘ 結果をB列に出力
Cells(i, 2).Value = pref
End If
Next i

MsgBox “都道府県の抽出が完了しました。”
End Sub

応用・注意点

1. 例外処理:上記コードは「大阪府」や「東京都」には対応していますが、「相生市」のように都道府県を含まない例外的な文字列が混ざっている場合は、判定ロジックをより厳密にする必要があります。
2. 固定値化:もし抽出したデータを別のシートへ転記したり、元の住所データを削除したりする場合は、計算結果を値として貼り付ける処理(Valueプロパティの代入)が重要です。数式のままにしておくと、元データを消した際に「#REF!」エラーが発生するため注意してください。
3. 現場での活用:より複雑な住所(市町村名まで分けるなど)を扱う場合は、InStr関数を使用して「市」や「区」の出現位置を特定するロジックに拡張していくのが、VBA中級者への近道です。

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