Help us understand the problem. What is going on with this article?

【Google Apps Script】その10 スプレッドシートにボタンを設置して、ワンクリックで郵便番号から住所を自動入力する

More than 1 year has passed since last update.

この記事はGoogle Apps Scriptを実例交えて基礎からざっくり学ぶ Advent Calendar 2017 10日目の記事です。

本アドベントカレンダーは@rt_pの個人プロジェクトですが、筆者はAteam Brides Inc. Advent Calendar 2017にも参加しています。そちらでも出張版記事を書いているので、覗いていただけると嬉しいです。

はじめに

この時期、年賀状作成の為に住所録を作ったりしますよね。
その時に非常に面倒なのは、何と言っても住所入力だと思います。

今日はスプレッドシートにボタンを設置し、クリックすると郵便番号から住所を自動入力してくれる仕組みを作りたいと思います。

kansei.PNG

APIを叩く仕組みを作る

今回は、zipcloudの郵便番号検索APIを利用します。
http://zipcloud.ibsnet.co.jp/doc/api

まずはスクリプトエディタを開き、以下コードに置き換えて実行します。
スクリプトエディタの開き方や承認が必要ですメッセージが出た際の対処法が分からない場合は
アドベントカレンダー1日目のHello, world!記事をご参照ください。

zip_to_address.gs
function searchZipCode() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getActiveCell();
  var value = range.getValue();
  try {
    var address = requestZipCodeApi(value);
    sheet.getRange(range.getRow(), range.getColumn() + 1, 1, 3).setValues([[address['address1'], address['address2'], address['address3']]]);
  } catch (e) {
    Browser.msgBox(e);
  }
}

// APIを叩く
function requestZipCodeApi(zipCode) {
  var url = 'http://zipcloud.ibsnet.co.jp/api/search?zipcode=' + zipCode;
  var response = UrlFetchApp.fetch(url);
  var json = response.getContentText();
  var values = JSON.parse(json);

  if (values['message']) {
    throw 'エラー!' + values['message'];
  } else if (!values['results']) {
    throw 'エラー!' + '一致する住所が見つかりません';
  }
  return values['results'][0];
}

エラー処理等はやや簡略化して、シンプルな実装にしています。

getActiveCell()

https://developers.google.com/apps-script/reference/spreadsheet/sheet#getactivecell

基本的に今まで出てきた基礎編の内容でカバーされているはずです。
新出は、アクティブのセル範囲を取得するgetActiveCell()ぐらいでしょうか。

上記ソースを入力したら、三角アイコンをクリックしてsearchZipCode()を実行します。

スプレッドシートに何も入力していないと、恐らくメッセージボックスにエラー!必須パラメータが指定されていません。と出るはずです。
このメッセージが出たら、APIへリクエストを送れていることが確認できます。

次に、スプレッドシートを以下の通り編集します。

zipcode.PNG

A2にカーソルを合わせた状態(アクティブ状態)にした後、再度スクリプトエディタに戻りsearchZipCode()を実行すると、今度は住所が自動入力されるはずです。

zipcode2.PNG

ボタンを設置

これで住所が自動入力されることは確認できましたが、郵便番号を入れる度にスクリプトエディタを開くのは大変です。
スプレッドシートにボタンを設置し、それをクリックすると今と同じスクリプトが実行されるようにしましょう。

挿入→図形描画を選択。
insert.png

四角形と分かりやすい文字を入れて、保存して閉じるを選びます。

描画された図形の右上にある3つの縦に並んだ点をクリックし、スクリプトを割り当てを選択。

script.png

ダイアログが出るので、クリック時に実行したい関数を入力しOKを押せば完成。

wariate.png

あとは郵便番号を入れて、そのセルを選択した状態でボタンを押すことで住所が自動入力されます。
※ちなみにサンプルは日本で最も有名なテーマパークの住所です。

kansei.PNG

おわりに

今までの基礎編に比べ、だいぶ実用的な機能が出来上がったと思います。
明日からの紹介もお楽しみに!

明日

【Google Apps Script】その11 Webサイトのスクリーンショットを定期的にGoogle Driveに保存する
となります。
毎日特定のWebサイトのスクリーンショット撮影し、Googleドライブに溜めていく方法をご紹介します。

前の記事
【Google Apps Script】その9 エラーを拾う
次の記事
【Google Apps Script】その11 Webサイトのスクリーンショットを定期的にGoogle Driveに保存する

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした