スプレッドシートで住所から郵便番号を自動入力!GASで作業を効率化
- 効率的に住所入力したい方
- スプレッドシートを使った作業を簡単にしたい方
前回の記事では、郵便番号から住所を自動入力する方法をご紹介しましたが、
今回は 住所入力 → 郵便番号の自動入力の方法をご紹介します。
Google Apps Script(GAS)を使うことで、まとめて郵便番号を入力できます。
大量のデータを扱う場合や、手動での入力を減らしたい時におすすめです。
完成イメージ
住所をA列に入力してスクリプトを実行すると、郵便番号がB列に表示されます。
郵便番号の取得なので、A列のセルには番地以下の入力をしなくてもOKです。
住所から郵便番号を取得する手順
1行目のA列に「住所」、B列に「郵便番号」の項目名を入力します。
A列には住所を入力し、B列にはGASによって郵便番号が自動入力されるようにします。
今回は、タブ名(シート)を”住所データ”と設定してGAS実行時に参照します。
Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。
function myFunction(){
}
が最初から入っているため、消去して以下のスクリプトを貼り付けます。
function processAddressRange() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// タブ名が「住所データ」であるか確認
if (sheet.getName() !== "住所データ") {
SpreadsheetApp.getUi().alert('現在のシート名は「住所データ」ではありません。');
return;
}
// A列の2行目以降で、データが入力されているセルのみ対象
var lastRow = sheet.getLastRow(); // 最終行を取得
var range = sheet.getRange(2, 1, lastRow - 1, 1); // A2からA列の最終行までの範囲を取得
var values = range.getValues(); // A列の住所データを取得
for (var i = 0; i < values.length; i++) {
var address = values[i][0].toString().trim(); // A列の各値を文字列に変換し、余分なスペースを削除
var row = i + 2; // 行番号(2行目がインデックス0に対応)
// 値が空の場合はスキップ
if (address === '') {
Logger.log("A" + row + " は空です。スキップします。");
continue;
}
Logger.log("処理対象のセル: A" + row + ", 住所: " + address);
var zipcode = getZipcodeFromExcelAPI(address);
if (zipcode) {
Logger.log("取得した郵便番号: " + zipcode);
// 同じ行のB列に郵便番号を自動入力
sheet.getRange(row, 2).setValue(zipcode); // B列に郵便番号を入力
} else {
Logger.log("郵便番号が見つかりませんでした: A" + row);
sheet.getRange(row, 2).setValue("該当なし"); // B列に該当なしメッセージを入力
}
}
}
// ExcelAPIを使用して住所から郵便番号を取得する関数
function getZipcodeFromExcelAPI(address) {
var url = 'https://api.excelapi.org/post/zipcode?address=' + encodeURIComponent(address);
Logger.log("APIリクエストURL: " + url);
try {
var response = UrlFetchApp.fetch(url);
var content = response.getContentText();
Logger.log("APIレスポンス: " + content);
// レスポンスが郵便番号として返されているかを確認
if (content && content.length === 7 && !isNaN(content)) {
return content; // 郵便番号を返す
} else {
Logger.log("該当する郵便番号が見つかりませんでした。");
return null;
}
} catch (error) {
Logger.log("エラーが発生しました: " + error.message);
return null;
}
}
スクリプトの説明
- 関数1:
processAddressRange()
-
- スプレッドシート内の住所データを読み取り、対応する郵便番号を検索してB列に反映する役割を持ちます。
sheet.getActiveSpreadsheet().getActiveSheet()
-
- 現在アクティブなスプレッドシートを取得し、操作対象のシートを定義します。
if (sheet.getName() !== "住所データ")
-
- シート名が「住所データ」であることを確認します。この条件が満たされない場合、処理を中断し、ユーザーに警告メッセージを表示します。
var lastRow = sheet.getLastRow();
-
- シートの最終行を取得します。これにより、データの入っている範囲を動的に処理することができます。
var range = sheet.getRange(2, 1, lastRow - 1, 1);
-
- A列の2行目から最終行までの範囲を指定し、その範囲の住所データを取得します。
var values = range.getValues();
-
- 上で指定した範囲のセルのデータを2次元配列として取得します。
for (var i = 0; i < values.length; i++)
-
- 取得した住所データを順番に処理します。
i
は0から始まり、values.length
までの範囲でループします。
var address = values[i][0].toString().trim();
-
- A列の各セルに入っている住所を文字列に変換し、余分なスペースを取り除きます。
if (address === '')
-
- 住所データが空の場合、その行の処理をスキップします。
var zipcode = getZipcodeFromExcelAPI(address);
-
getZipcodeFromExcelAPI
関数を呼び出し、住所から郵便番号を取得します。
sheet.getRange(row, 2).setValue(zipcode);
-
- 取得した郵便番号を同じ行のB列に自動的に入力します。
郵便番号が見つからない場合は、「該当なし」と表示されます。
- 取得した郵便番号を同じ行のB列に自動的に入力します。
- 関数2:
getZipcodeFromExcelAPI()
-
- ExcelAPIを使って住所から郵便番号を取得します。
var url = 'https://api.excelapi.org/post/zipcode?address=' + encodeURIComponent(address);
-
- ExcelAPIのリクエストURLを生成します。
address
にはエンコードした住所データが挿入されます。
- ExcelAPIのリクエストURLを生成します。
UrlFetchApp.fetch(url)
-
指定したURLに対してHTTPリクエストを送り、APIのレスポンスを取得します。これは外部リクエストであり、URLで指定した住所に対応する郵便番号を取得します。
var content = response.getContentText();
-
- APIから返されたレスポンスをテキスト形式で取得します。
if (content && content.length === 7 && !isNaN(content))
-
- レスポンスが存在し、長さが7桁であることを確認します(郵便番号は7桁の数値であるため)。条件を満たす場合、その郵便番号を返します。
return content;
-
条件が満たされた場合、郵便番号を返します。
- エラーハンドリング
-
APIリクエストが失敗したり、適切な郵便番号が見つからない場合、
Logger.log
でエラーメッセージを表示し、null
を返します。
コードを書いたら、名前をつけて保存します。
(例:「住所-郵便番号」)
スクリプトを実行して、住所に応じた郵便番号を取得します。
実行が完了すると、B列に郵便番号が表示されます。
A列の住所が正しく入力されていない場合、B列の郵便番号は「該当なし」と表示されます。
郵便番号の表示形式を「000-0000」に変更する方法
スクリプトによって取得された郵便番号は7桁の形式「0000000」で表示されますが、見やすいように「000-0000」とハイフン付きの形式に変更することができます。
これは、スプレッドシートの表示形式を使うことで変更できます。
郵便番号が表示されているセル範囲(例: B2からB列の最終行)を選択します。
メニューから「表示形式」→「数字」→「カスタム数値形式」を選択します。
表示された入力ボックスに、000-0000
と入力します。
これで、B列の郵便番号が「000-0000」形式で表示されるようになります。
ハイフン付きの形式にスクリプトで変更する場合
もし、スクリプト内で直接「000-0000」形式で表示したい場合は、郵便番号のフォーマットをスクリプト内で変更することもできます。
以下のように、郵便番号の表示をスクリプト内でカスタマイズできます。
if (zipcode) {
Logger.log("取得した郵便番号: " + zipcode);
var formattedZipcode = zipcode.slice(0, 3) + '-' + zipcode.slice(3); // 000-0000形式に変換
sheet.getRange(row, 2).setValue(formattedZipcode); // B列に郵便番号を入力
} else {
Logger.log("郵便番号が見つかりませんでした: A" + row);
sheet.getRange(row, 2).setValue("該当なし"); // B列に該当なしメッセージを入力
}
ExcelAPIの無料プラン制限について
APIのリクエスト:1日あたり10,000件まで
スクリプトを使って住所から郵便番号を取得する際に利用するExcelAPIですが、無料プランには1日に処理できるリクエスト数の制限があります。
ExcelAPIの無料プランでは、1日あたり10,000件までのリクエストが可能です。
大量のデータを扱う際には、この制限に注意する必要があります。
10,000件を超えるデータを一度に処理したい場合は、
- データを数日間に分けて処理する:
- 有料プランの利用
などの方法で対応が可能です。
より多くのデータを一度に処理したい場合は、ExcelAPIの有料プランを検討するといいかもしれません。
まとめ
Google Apps Script(GAS)を活用すれば、住所を入力するだけで郵便番号が自動取得できるようになります。
大量の住所データを管理したり、郵便番号を手作業で入力する時間を削減したい場合に有効です。
郵便番号から住所を自動入力する方法もあるので、状況に応じてご活用ください。
弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。
GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。
また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。
貴方の業務改善を全力でサポートいたします。
コメント