スプレッドシートで住所から郵便番号を自動入力!GASで作業を効率化

この記事をおすすめの方
  • 効率的に住所入力したい方
  • スプレッドシートを使った作業を簡単にしたい方

前回の記事では、郵便番号から住所を自動入力する方法をご紹介しましたが、

今回は 住所入力 → 郵便番号の自動入力の方法をご紹介します。 

Google Apps Script(GAS)を使うことで、まとめて郵便番号を入力できます。

大量のデータを扱う場合や、手動での入力を減らしたい時におすすめです。

目次

完成イメージ

住所をA列に入力してスクリプトを実行すると、郵便番号がB列に表示されます。

郵便番号の取得なので、A列のセルには番地以下の入力をしなくてもOKです。

住所から郵便番号を取得する手順

STEP
スプレッドシートを準備

1行目のA列に「住所」、B列に「郵便番号」の項目名を入力します。

A列には住所を入力し、B列にはGASによって郵便番号が自動入力されるようにします。

今回は、タブ名(シート)を”住所データ”と設定してGAS実行時に参照します。

STEP
GASエディタを開く

Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。

STEP
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列に自動的に入力します。
    郵便番号が見つからない場合は、「該当なし」と表示されます。
関数2: getZipcodeFromExcelAPI()
  • ExcelAPIを使って住所から郵便番号を取得します。
var url = 'https://api.excelapi.org/post/zipcode?address=' + encodeURIComponent(address);
  • ExcelAPIのリクエストURLを生成します。address にはエンコードした住所データが挿入されます。
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 を返します。

STEP
スクリプトを保存

コードを書いたら、名前をつけて保存します。

(例:「住所-郵便番号」)

STEP
スクリプトを実行

スクリプトを実行して、住所に応じた郵便番号を取得します。

STEP
B列に郵便番号が反映

実行が完了すると、B列に郵便番号が表示されます。

A列の住所が正しく入力されていない場合、B列の郵便番号は「該当なし」と表示されます。

郵便番号の表示形式を「000-0000」に変更する方法

スクリプトによって取得された郵便番号は7桁の形式「0000000」で表示されますが、見やすいように「000-0000」とハイフン付きの形式に変更することができます。

これは、スプレッドシートの表示形式を使うことで変更できます。

STEP
セル範囲を選択

郵便番号が表示されているセル範囲(例: B2からB列の最終行)を選択します。

STEP
カスタム数値形式を選択

メニューから「表示形式」→「数字」→「カスタム数値形式」を選択します。

STEP
000-0000 と入力

表示された入力ボックスに、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導入補助金の申請サポートも行っております。

貴方の業務改善を全力でサポートいたします。

お問い合わせはこちら

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次