スプレッドシートで郵便番号から住所を自動入力する方法【少量ならIME辞書 or 数式、大量ならGAS】
- 効率的に住所入力したい方
- スプレッドシートを使った作業を簡単にしたい方
日常の業務や個人のタスクで、住所入力が面倒に思うことありませんか?
特に、何度も同じような住所を手入力するのは時間がかかりミスも起こりやすくなります。
そんな時、郵便番号から自動的に住所を入力する方法を使えば、作業効率を改善できます。
この記事では、郵便番号から住所を自動入力する3つの方法をご紹介します。
- 少量のデータなら、郵便番号を入力してすぐに変換できるMicrosoft IMEの郵便番号辞書
- 少量のデータのもう一つの方法として、数式(IMPORTXML関数)を使った入力。
- 大量のデータなら、一括で自動化できるGoogle Apps Script(GAS)。
データの量や使用状況に応じて、使い分けると便利です。
住所から郵便番号を入力する場合はこちらの記事をご覧ください。
少量データ向き①:郵便番号辞書でカンタンに住所を入力
メリット | デメリット |
---|---|
郵便番号を入力→変換ですぐに表示 プログラミングの知識が不要 オフラインでも利用可 | 一度に大量のデータには不向き |
少量のデータを扱う場合は、郵便番号から住所をすぐに入力できる方法として、Microsoft IMEの郵便番号辞書が便利です。
特別な設定が不要で、日常的な文字入力の延長で使用できます。
IME 郵便番号辞書を使った入力手順
例えば全角で「100-0001」と入力します。
スペースキーを押すと、該当する住所(例: 東京都千代田区千代田)が変換候補として表示されます。
表示された住所を選択し、エンターキーで確定します。
これで、郵便番号に対応する住所が入力されます。
特に数件程度の住所入力の場合はこの方法がカンタンです。
郵便番号辞書の設定確認
郵便番号辞書は通常デフォルトで有効になっています。
ですが、もしOFFになっている場合や設定を確認する場合は、次の手順で確認・設定ができます。
郵便番号辞書の確認方法
Windows 画面下のタスクバーからMicrosoft IMEを右クリックで選択します。
その中の「設定」を開きます。
時刻と言語 → 言語と地域 → Microsoft IME の画面に移動したら、「学習と辞書」を開きます
「学習と辞書」セクションの下に「郵便番号辞書」が表示されます。
ここで、スイッチがオンになっていることを確認します。
もしスイッチがオフになっていたら、クリックしてオンにします。
これで、郵便番号辞書が有効になります。
少量データ向き②:数式(IMPORTXML関数)を使って郵便番号から住所を入力
メリット | デメリット |
---|---|
数式入力だけのため設定が簡単 プログラミングの知識が不要 | 大量のデータがあると動作が重くなる |
少量のデータを扱う場合のもう一つの方法として、外部API(ExcelAPI)から住所を自動取得できる方法です。
GASのようなプログラムを書く必要もないため、こちらも少量データを処理したい場合に便利です。
数式を使った入力手順
B列に郵便番号を半角数字で入力します。
(ハイフン「‐」を付けず数字のみ)
=IMPORTXML("https://api.excelapi.org/post/address?zipcode="&B2,".")
上の数式を入力します。
「B2」の部分が郵便番号のセルに該当するため、必要に応じてこの部分を変更します。
数式の説明
数式の説明
IMPORTXML
:-
外部のAPIからデータを取得して、スプレッドシートに自動入力します。
- APIリクエスト:
-
APIに郵便番号を送信し、それに対応する住所を取得します。
数式を入力するとデータが反映されます。
C3以降には数式をコピーして使用します。
大量のデータを一気に処理!GASを使って郵便番号から住所を自動入力
メリット | デメリット |
---|---|
大量データの自動処理ができる ZipCloud APIを使って最新の住所データを取得 | 初期設定が必要: |
大量のデータを処理する必要がある場合には、Google Apps Script(GAS)を活用すると効率的です。
スプレッドシートで数十〜数百件の住所データを管理する場合に、郵便番号の入力だけで対応する住所が反映される仕組みを作ることができます。
GASを使った入力手順
Googleスプレッドシートに、郵便番号を入力する列と、住所を表示する列を用意します
(例: B列に郵便番号、C列に住所)
今回は、タブ名(シート)を”郵便番号”と設定してGAS実行時に参照します。
B2以降に郵便番号を半角数字で入力します。
(ハイフン「‐」を付けず数字のみ)
Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。
function myFunction(){
}
が最初から入っているため、消去して以下のスクリプトを貼り付けます。
function processZipcodeRange() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// タブ名が「郵便番号」の場合のみ実行
if (sheet.getName() !== "郵便番号") {
SpreadsheetApp.getUi().alert('現在のシート名は「郵便番号」ではありません。');
return;
}
// B列の2行目以降で、データが入力されているセルのみ対象
var lastRow = sheet.getLastRow(); // 最終行を取得
var range = sheet.getRange(2, 2, lastRow - 1, 1); // B2からB列の最終行までの範囲を取得
var values = range.getValues(); // B列の値を取得
for (var i = 0; i < values.length; i++) {
var inputValue = values[i][0].toString(); // B列の各値を文字列に変換
var row = i + 2; // 行番号(2行目がインデックス0に対応)
// 値が空の場合はスキップ
if (inputValue === '') {
continue;
}
Logger.log("処理対象のセル: B" + row + ", 値: " + inputValue);
// ハイフンを含む場合はハイフンを除去
inputValue = inputValue.replace("-", "");
// 7桁の郵便番号かどうかを確認
if (inputValue.length == 7 && !isNaN(inputValue)) {
Logger.log("7桁の郵便番号検出: " + inputValue);
var address = getAddressFromZipcode(inputValue);
if (address) {
Logger.log("取得した住所: " + address);
// 同じ行のC列に住所を自動入力
sheet.getRange(row, 3).setValue(address); // C列に住所を入力
} else {
Logger.log("住所が見つかりませんでした: B" + row);
sheet.getRange(row, 3).setValue("該当なし"); // C列に該当なしメッセージを入力
}
} else {
Logger.log("無効な郵便番号です: B" + row + " 値: " + inputValue);
sheet.getRange(row, 3).setValue("無効な郵便番号"); // C列にエラーメッセージを入力
}
}
}
// 郵便番号から住所を取得する関数
function getAddressFromZipcode(zipcode) {
var url = 'https://zipcloud.ibsnet.co.jp/api/search?zipcode=' + zipcode;
Logger.log("APIリクエストURL: " + url);
try {
var response = UrlFetchApp.fetch(url);
var json = JSON.parse(response.getContentText());
Logger.log("APIレスポンス: " + response.getContentText());
if (json.results) {
var result = json.results[0];
var address = result.address1 + result.address2 + result.address3; // 住所を結合
Logger.log("取得した住所: " + address);
return address;
} else {
Logger.log("該当する住所が見つかりませんでした。");
return null;
}
} catch (error) {
Logger.log("エラーが発生しました: " + error.message);
return null;
}
}
スクリプトの説明
- 関数1: processZipcodeRange – 郵便番号を元に住所を取得して表示するメインの処理
-
function processZipcodeRange() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // タブ名が「郵便番号」の場合のみ実行 if (sheet.getName() !== "郵便番号") { SpreadsheetApp.getUi().alert('現在のシート名は「郵便番号」ではありません。'); return; } // B列の2行目以降で、データが入力されているセルのみ対象 var lastRow = sheet.getLastRow(); // 最終行を取得 var range = sheet.getRange(2, 2, lastRow - 1, 1); // B2からB列の最終行までの範囲を取得 var values = range.getValues(); // B列の値を取得 for (var i = 0; i < values.length; i++) { var inputValue = values[i][0].toString(); // B列の各値を文字列に変換 var row = i + 2; // 行番号(2行目がインデックス0に対応) // 値が空の場合はスキップ if (inputValue === '') { continue; } Logger.log("処理対象のセル: B" + row + ", 値: " + inputValue); // 7桁の郵便番号かどうかを確認 if (inputValue.length == 7 && !isNaN(inputValue)) { Logger.log("7桁の郵便番号検出: " + inputValue); var address = getAddressFromZipcode(inputValue); if (address) { Logger.log("取得した住所: " + address); // 同じ行のC列に住所を自動入力 sheet.getRange(row, 3).setValue(address); // C列に住所を入力 } else { Logger.log("住所が見つかりませんでした: B" + row); sheet.getRange(row, 3).setValue("該当なし"); // C列に該当なしメッセージを入力 } } else { Logger.log("無効な郵便番号です: B" + row + " 値: " + inputValue); sheet.getRange(row, 3).setValue("無効な郵便番号"); // C列にエラーメッセージを入力 } } } // 郵便番号から住所を取得する関数 function getAddressFromZipcode(zipcode) { var url = 'https://zipcloud.ibsnet.co.jp/api/search?zipcode=' + zipcode; Logger.log("APIリクエストURL: " + url); try { var response = UrlFetchApp.fetch(url); var json = JSON.parse(response.getContentText()); Logger.log("APIレスポンス: " + response.getContentText()); if (json.results) { var result = json.results[0]; var address = result.address1 + result.address2 + result.address3; // 住所を結合 Logger.log("取得した住所: " + address); return address; } else { Logger.log("該当する住所が見つかりませんでした。"); return null; } } catch (error) { Logger.log("エラーが発生しました: " + error.message); return null; } }
現在のタブ(シート)が「郵便番号」であるか確認:
- スクリプトは、タブ名が「郵便番号」であることを確認してから処理を開始します。
- もし異なるシート名で実行された場合は、警告を表示し、処理を停止します。
- 必要に応じてタブ名をご変更ください。
B列2行目以降に入力されている郵便番号を処理:
- B列2行目以降にあるデータを取得し、7桁の郵便番号が入力されているセルに対して処理を行います。
- 空のセルはスキップされ、7桁でない郵便番号が入力されている場合はエラーメッセージを表示します。
郵便番号が7桁かどうか確認:
- 各セルに入力されているデータが7桁の数字かどうかを確認します。
- もし7桁の郵便番号であれば、
getAddressFromZipcode
関数を使って対応する住所を取得します。
住所が見つかった場合はC列に表示:
- 取得した住所が存在する場合、同じ行のC列にその住所を表示します。
- 住所が見つからなかった場合、「該当なし」と表示します。
無効な郵便番号の場合の処理:
- 郵便番号が7桁でない場合、「無効な郵便番号」と表示します
- 関数2:
getAddressFromZipcode
– 郵便番号から住所を取得する -
// 郵便番号から住所を取得する関数 function getAddressFromZipcode(zipcode) { var url = 'https://zipcloud.ibsnet.co.jp/api/search?zipcode=' + zipcode; Logger.log("APIリクエストURL: " + url); try { var response = UrlFetchApp.fetch(url); var json = JSON.parse(response.getContentText()); Logger.log("APIレスポンス: " + response.getContentText()); if (json.results) { var result = json.results[0]; var address = result.address1 + result.address2 + result.address3; // 住所を結合 Logger.log("取得した住所: " + address); return address; } else { Logger.log("該当する住所が見つかりませんでした。"); return null; } } catch (error) { Logger.log("エラーが発生しました: " + error.message); return null; } }
ZipCloud APIを使って、郵便番号から住所を取得します。
- APIリクエストを作成:
- 郵便番号をもとに、ZipCloud APIに対してリクエストを送信します。リクエストURLは
https://zipcloud.ibsnet.co.jp/api/search?zipcode=XXXXXXX
という形式です。
- 郵便番号をもとに、ZipCloud APIに対してリクエストを送信します。リクエストURLは
- APIレスポンスの解析:
- APIからのレスポンスをJSON形式で取得し、結果に対応する住所(
address1
、address2
、address3
)を結合して返します。
- APIからのレスポンスをJSON形式で取得し、結果に対応する住所(
- 住所が見つからなかった場合の処理:
- もし該当する住所がなければ、null を返し、メインの関数(
processZipcodeRange
)にて「該当なし」というメッセージを表示します。
- もし該当する住所がなければ、null を返し、メインの関数(
- エラーハンドリング:
- APIリクエストでエラーが発生した場合、スクリプトはエラーメッセージをログに表示し、
null
を返します。これにより、通信エラーやリクエスト失敗時にも処理が止まらないようにしています。
- APIリクエストでエラーが発生した場合、スクリプトはエラーメッセージをログに表示し、
- APIリクエストを作成:
コードを書いたら、名前をつけて保存します。
(例:「郵便番号-住所検索」)
スクリプトを実行して、郵便番号に応じた住所を取得します。
C2以降のセルに住所が入力されていれば完了です。
B列の郵便番号が正しく入力されていない場合、C列の住所は「該当なし」と表示されます。
郵便番号、住所、番地以降のデータを統合
郵便番号、住所、番地以降の情報を入力し終えたら、これらを1つのセルにまとめて表示させることができます。
今回の例ではF2セルに以下の数式を入力して住所全体を表示しています。
アレイフォーミュラ関数を使ってF2以降のセルにも数式が適用されます。
=ARRAYFORMULA(IF(B2:B <> "", IF(C2:C = "", "-", "〒" & LEFT(B2:B, 3) & "-" & MID(B2:B, 4, 4) & " " & C2:C & D2:D), ""))
数式の説明
B列、C列、D列のデータを統合してF列に表示させます。
ARRAYFORMULA
:-
範囲全体に対して数式を適用します。これを使うことで、B列、C列、D列にデータがある範囲全体を処理できます。
IF(B2:B <> "", ...)
:-
B列に郵便番号がある場合のみ処理を行います。郵便番号が空の場合は、対応するF列にも空白を表示します。
IF(C2:C = "", "-", ...)
:-
C列(住所)が空の場合、F列にはハイフン(
"-"
)を表示して「住所が見つからない」状態を示します。 "〒" & LEFT(B2:B, 3) & "-" & MID(B2:B, 4, 4)
:-
B列の郵便番号を取得し、「〒」を付けた上で、最初の3桁と4桁目以降をハイフンで区切って表示します。
C2:C & D2:D
:-
C列(住所)とD列(番地以降)の内容を結合し、F列に一つのデータとして表示します。住所と番地以降が連続して表示されます。
まとめ
少量のデータには「郵便番号辞書」もしくは「IMPORTXML関数」、大量のデータには「GAS」を使い分けることで、住所入力を効率化できます。
状況に合わせて、効果的な方法をご活用ください。
弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。
GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。
また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。
貴方の業務改善を全力でサポートいたします。
コメント