JavaScript
GoogleSpreadSheet

Googleスプレッドシートで郵便番号から住所を表示する関数

概要

セルに郵便番号を入力することで、住所を表示してくれる関数があったらなぁと思って書きました。
GoogleAPIに住所検索があるので今回はそれを利用しています。

使い方

下記をスクリプトエディタにコピペすれば関数を利用できるようになります。
=ZIP_ADDRESS("154-0004","prefecture")
みたいな感じ。

function ZIP_ADDRESS(zip,part)
{
  var response = UrlFetchApp.fetch('https://maps.googleapis.com/maps/api/geocode/json?language=ja&sensor=false&address=' + zip);
  var results = JSON.parse(response.getContentText()).results;
  var address = results[0].address_components;

  var return_name = "";

  switch (part){
    case "country":
      return_name += _get_long_name(address, "country");
      break;

    case "prefecture":
      return_name += _get_long_name(address, "administrative_area_level_1");
      break;

    case "address1":
      return_name += _get_long_name(address, "administrative_area_level_2");
      return_name += _get_long_name(address, "locality");
      return_name += _get_long_name(address, "sublocality_level_1");
      break;

    case "address2":
      return_name += _get_long_name(address, "sublocality_level_2");
      return_name += _get_long_name(address, "sublocality_level_3");
      return_name += _get_long_name(address, "sublocality_level_4");
      break;

    case "address3":
      return_name += _get_long_name(address, "premise");
      break;
  }

  return return_name;
}

// 取得した配列からlong_nameを抽出する関数
function _get_long_name(address, type_name)
{
  var long_name = "";
  for (var i = 0; i < address.length; i++) {
    if (0 <= address[i].types.indexOf(type_name)) {
      long_name = address[i].long_name;
      break; 
    }
  }
  return long_name;
}