初めに
受けている案件で、住所から郵便番号を検索�きないか相談されたので、
スプレッドシートで簡単に、かつ無料で郵便番号を検索できるコードを作りました〜。
実際のコード
function searchZip() {
var sheetName = '修正後'; // 対象のシート名を指定
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
if (!sheet) {
console.error('指定されたシートが見つかりません: ' + sheetName);
return;
}
var lastRow = sheet.getLastRow();
if (lastRow < 2) {
console.error('データが存在しません。');
return;
}
var addresses = sheet.getRange('J2:J' + lastRow).getValues();
var existingZipCodes = sheet.getRange('L2:L' + lastRow).getValues();
var zipCodes = [];
var batchSize = 100; // 一度に処理する行数
var count = 0;
for (var i = 0; i < addresses.length; i++) {
var address = addresses[i][0];
var existingZip = existingZipCodes[i][0];
if (existingZip) {
zipCodes.push([existingZip]); // 既存の郵便番号を保持
continue; // 次の行へ
}
if (address) {
try {
var response = UrlFetchApp.fetch('https://postcode.teraren.com/postcodes.json?s=' + encodeURIComponent(address) + '&per=3',
{muteHttpExceptions: true});
Logger.log(response.getContentText());
var json = JSON.parse(response.getContentText());
Logger.log(json)
if (json && json.length > 0) {
var rawZip = json[0].new.toString(); // 数値を文字列に変換
var formattedZip = rawZip.slice(0, 3) + '-' + rawZip.slice(3); // ハイフンを挿入
zipCodes.push([formattedZip]);
} else {
zipCodes.push(['該当なし']);
}
} catch (e) {
console.error('エラーが発生しました: ' + e.toString());
zipCodes.push(['エラー']);
}
} else {
zipCodes.push(['']);
}
count++;
// 100件処理するごとにスプレッドシートに書き込む
if (count >= batchSize) {
sheet.getRange('L' + (i - count + 3) + ':L' + (i + 2)).setValues(zipCodes.slice(i - count + 1, i + 1));
count = 0;
}
}
// 残りのデータを書き込む
if (count > 0) {
sheet.getRange('L' + (lastRow - count + 2) + ':L' + lastRow).setValues(zipCodes.slice(-count));
}
}
一応、100件検索したら、それを先にスプシに書き込むようにしてます。
郵便番号の記載形式は[000-0000]にしてます。
終わりに
一部エラーが出ますが、書き込み自体に問題はないので勘弁してください笑