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

この記事は[Google Apps Scriptを実例交えて基礎からざっくり学ぶ Advent Calendar 2017](https://qiita.com/advent-calendar/2017/gas_beginner)　10日目の記事です。

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

# はじめに

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

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

![kansei.PNG](https://qiita-image-store.s3.amazonaws.com/0/199678/6d14b370-714b-d989-0b13-75c1b28698e6.png)

# APIを叩く仕組みを作る

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

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

```javascript: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](https://qiita-image-store.s3.amazonaws.com/0/199678/f43bd25b-d616-ca01-443b-4007a257d46b.png)

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

![zipcode2.PNG](https://qiita-image-store.s3.amazonaws.com/0/199678/cd6262c6-7296-c537-dc79-c8d35be75fca.png)

# ボタンを設置

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

*挿入→図形描画*を選択。
![insert.png](https://qiita-image-store.s3.amazonaws.com/0/199678/98e16f6c-5729-ce53-b5ed-f42ff6676c9d.png)

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

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

![script.png](https://qiita-image-store.s3.amazonaws.com/0/199678/8f7a5af2-0acb-0686-cb06-c7093e9cebe6.png)

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

![wariate.png](https://qiita-image-store.s3.amazonaws.com/0/199678/6fa2a218-5557-6131-f5cd-52ec12c0b5d8.png)

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

![kansei.PNG](https://qiita-image-store.s3.amazonaws.com/0/199678/6d14b370-714b-d989-0b13-75c1b28698e6.png)

# おわりに

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

# 明日

[【Google Apps Script】その11　Webサイトのスクリーンショットを定期的にGoogle Driveに保存する](https://qiita.com/rf_p/items/1d9b3e7ac3c63d6dd117)
となります。
毎日特定のWebサイトのスクリーンショット撮影し、Googleドライブに溜めていく方法をご紹介します。

前の記事
[【Google Apps Script】その9　エラーを拾う](https://qiita.com/rf_p/items/eb0cd8733132b000189a)
次の記事
[【Google Apps Script】その11　Webサイトのスクリーンショットを定期的にGoogle Driveに保存する](https://qiita.com/rf_p/items/1d9b3e7ac3c63d6dd117)