Excelで住所を郵便番号へ一括変換したいときはないでしょうか。
けど、そんな中で悩むことは、
・VLOOKUP関数を使わずに住所を郵便番号へ一括変換したいが方法がよくわからない
ですよね。
今回はそんなお悩みを解決する
・VLOOKUP関数を使わずに住所を郵便番号へ一括変換する方法
についてまとめます!
もくじ
Excelで住所を郵便番号へ一括変換するイメージ
Excelで住所を郵便番号へ一括変換するイメージについて説明をします。
まずは最新の郵便番号データを郵便局サイトからダウンロードします。
次に郵便番号データをExcelへインポートし、
住所を入力し、独自の関数を設定すると、
関数を入力したセルに郵便番号が表示されます!
なお、住所に半角/全角スペースが入っていても変換可能です!
大量の郵便番号データから住所を調べるときに便利ですね!
それでは早速試してみましょう。
Excelで住所を郵便番号へ一括変換する方法
Excelで住所を郵便番号へ一括変換するについて説明をします。
EXTAN_JUYU関数について
使う関数はEXTAN_JUYU関数となります。
EXTAN_JUYU関数はエク短オリジナル関数で、住所文字列を指定すると郵便番号を返す関数です。
構文と設定パラメータ
EXTAN_JUYU関数の構文と設定パラメータは以下の通りです。
関数名 | EXTAN_JUYU |
---|---|
構文 | EXTAN_JUYU (住所) |
設定パラメータ | 住所(String型): 必須。 住所を示す文字列を指定します。” ”や” “が入っていても問題ありません。 |
郵便番号データを郵便局サイトからダウンロードする
最新の郵便番号データを郵便局サイトからダウンロードします。
郵便番号データダウンロードページ
https://www.post.japanpost.jp/zipcode/dl/oogaki-zip.html
「全国一括」リンクをクリックします。
https://www.post.japanpost.jp/zipcode/dl/oogaki/zip/ken_all.zip
ダウンロードが完了したら、ZIPファイルを解凍し、CSVファイルを任意の場所に格納しましょう。
CSVをExcelへ取り込む
ダウンロードしたCSVファイルのデータをExcelへ取り込みましょう。
「データ」タブをクリックし、「テキストまたはCSVから」ボタンをクリックし、
ダウンロードしたCSVファイルを選択します。
「KEN_ALL」シート名で取り込められたら取り込み完成です。
サンプルの郵便番号を入力する
まずはサンプルの住所文字列をA列へ入力していきます。
住所文字列に半角/全角スペースが含まれても関数側で除外しますので、問題ありません。
オリジナル関数のVBAコードを実装する
オリジナル関数が含まれるVBAコードをExcelへ実装します。
Function EXTAN_JUYU(rngCell As Range) As String
Dim arrYuData As Variant
Dim strCellValue As String
Dim strJusho As String
Dim lngEndrow As Long
Dim i As Long
'郵便番号リストを対象にします。
With ThisWorkbook.Worksheets("KEN_ALL")
'入力値をクレンジングします。
strCellValue = Replace(rngCell.Value, " ", "")
strCellValue = Replace(strCellValue, " ", "")
'郵便番号リストの最終行を取得します。
lngEndrow = .Cells(Rows.Count, 1).End(xlUp).Row
'郵便番号リストを配列に変換します。
arrYuData = .Range(.Cells(1, 1), .Cells(lngEndrow, 9))
'最終行から2行目まで逆順で処理を繰り返します。
For i = lngEndrow To 2 Step -1
'郵便番号リストの住所を文字結合して変数に代入します。
strJusho = arrYuData(i, 7) & arrYuData(i, 8) & arrYuData(i, 9)
'住所文字列をクレンジングします。
strJusho = Replace(strJusho, "以下に掲載がない場合", "")
'入力値の住所にリストの住所が部分一致したら処理します。
If InStr(strCellValue, strJusho) Then
'郵便番号を戻り値に設定します。
EXTAN_JUYU = arrYuData(i, 3)
'繰り返し処理を中断します。
Exit For
End If
Next i
End With
End Function
VBAの実装
VBAの実装方法については
VBAの実装手順
をご参照ください。
EXTAN_JUYU関数を入力する
EXTAN_JUYU関数を入力していきましょう。
B2セルに以下を入力します。
=EXTAN_JUYU(A2)
はい、郵便番号が出力されましたね!
最後のセルまでドラッグしましょう。
はい、他の住所も郵便番号が出力されましたね!!
VBAの説明
VBAについて説明をします。
Withで郵便番号リストシートを対象にします。シート名は”KEN_ALL”に固定するようお願いします。
With ThisWorkbook.Worksheets(“KEN_ALL”)
入力値をクレンジングします。
strCellValue = Replace(rngCell.Value, " ", "")
strCellValue = Replace(strCellValue, " ", "")
郵便番号リストの最終行を取得します。
lngEndrow = .Cells(Rows.Count, 1).End(xlUp).Row
郵便番号リストを配列に変換します。
arrYuData = .Range(.Cells(1, 1), .Cells(lngEndrow, 9))
最終行から2行目まで逆順で処理を繰り返します。
For i = lngEndrow To 2 Step -1
逆順にすることにより、3つ目の住所が優先され、該当する郵便番号が返る形になります。
郵便番号リストの住所を文字結合して変数に代入します。
strJusho = arrYuData(i, 7) & arrYuData(i, 8) & arrYuData(i, 9)
住所文字列をクレンジングします。
strJusho = Replace(strJusho, "以下に掲載がない場合", "")
入力値の住所にリストの住所が部分一致したら処理します。
If InStr(strCellValue, strJusho) Then
なお、以下のように仕様上リストデータ内にメモ書きがあったり、(**丁目)と記載があるものは検索対象外となりますので、予めご了承ください。。
郵便番号リストの住所を文字結合して変数に代入します。
strJusho = arrYuData(i, 7) & arrYuData(i, 8) & arrYuData(i, 9)
出力値をクレンジングします。
strJusho = Replace(strJusho, "以下に掲載がない場合", "")
郵便番号を戻り値に設定します。
EXTAN_JUYU = arrYuData(i, 3)
繰り返し処理を中断します。
Exit For
郵便番号データを更新する
郵便番号と住所は日々更新されています。
最新の状態にするためには同じく郵便局サイトから郵便番号データをダウンロードしてExcel側へ取り込んでいきます。
「全国一括」リンクをクリックします。
https://www.post.japanpost.jp/zipcode/dl/oogaki/zip/ken_all.zip
ダウンロードが完了したら、ZIPファイルを解凍し、CSVファイルを前回と同じ場所へ格納します。
次にExcel側のデータタブをクリックし、すべて更新ボタンをクリックします。
下段のステータスバーが消えれば顔料となります。
VBAの実装手順
実装手順は以下の通りです。
Excel側にVBAを実装していきます。
①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。
②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。
③右ペインのウインドウに上記のVBAを入力します。
こちらで完了です。
さいごに
いかがでしょうか。
今回は、
・VLOOKUP関数を使わずに住所を郵便番号へ一括変換する方法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
EXTAN_JUYU関数に関しては、住所が都道府県から入っている前提ですか?
〇〇市からだと表記されなかったため。
その場合、VBAの編集等で対応できますでしょうか。
当方、VBAはこちらの記事を参考に初めて使いました。
勉強になります、ありがとうございます。
いつもご利用ありがとうございます。
郵便番号を判断する基準は都道府県を含む住所となります。
市から始まる住所で郵便番号を判断する方法につきましては、以下のように都道府県の判定を外していただければと存じます。
■変更前
‘郵便番号リストの住所を文字結合して変数に代入します。
strJusho = arrYuData(i, 7) & arrYuData(i, 8) & arrYuData(i, 9)
■変更後
‘郵便番号リストの住所を文字結合して変数に代入します。
strJusho = arrYuData(i, 8) & arrYuData(i, 9)