郵便番号を入力したら自動的に正確な住所をセルに入力してくれたら楽ですね。
今回はGAS(Google Apps Script)での自動化になります。
GASでセルの値を変更したときにスクリプトを動作させる方法は2つあります。
onEdit()関数を使用する
セルの値が変更された時に自動的にonEdit()が実行されます。基本的にはonEdit()を使用すれば問題ありませんが、onEdit()にはHTTPのアクセスができないなどの制限があります。
トリガーを使用する
トリガーはスプレッドシート上での編集や、一定時間ごとに関数を呼び出すことができる機能です。トリガーでスクリプトを実行した場合はonEdit()にあるような制限はありません。
そのため今回はトリガーを使用してスプレッドシート変更時に自動的に郵便番号が入るスクリプトを作ります。
住所の取得は郵便番号検索APIを使用しています。
http://zipcloud.ibsnet.co.jp/doc/api
下記のような形でURLに指定してアクセスすると住所がJSON形式で返ってきます。郵便番号はハイフンありなしどちらでも大丈夫です。
http://zipcloud.ibsnet.co.jp/api/search?zipcode=郵便番号
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
function getAddressFromZipcode(event) { //アクティブなシートを取得 var aSheet = event.source.getActiveSheet(); //編集されたセルを取得 //var aCell = aSheet.getActiveCell(); var aRange = event.source.getActiveRange(); //編集されたセルの値を取得 var aRangeValue = aRange.getValue(); //編集されたセルがA列の場合 if(aRange.getColumn()==1){ //郵便番号を取得 var addressResult = getAddress(aRangeValue); if(addressResult.status == 200 && addressResult.results != "null") { //郵便番号が正しい場合はセルを白色にする aRange.setBackground("#ffffff"); //編集したセルの行を取得 var currentRow = aRange.getRow(); //住所をセルに書き込む aSheet.getRange(currentRow, 2).setValue(addressResult.results[0].address1); aSheet.getRange(currentRow, 3).setValue(addressResult.results[0].address2); aSheet.getRange(currentRow, 4).setValue(addressResult.results[0].address3); } else { Logger.log("Status is not 200 or results is null"); //郵便番号が正しくない場合はセルを赤色にする aRange.setBackground("#ff0000"); } } } //郵便番号から住所を取得する function getAddress(zipcode) { //URLの作成 var url = "http://zipcloud.ibsnet.co.jp/api/search?zipcode=" + zipcode; //住所の取得 var addressJson = UrlFetchApp.fetch(url); //JSON形式のテキストのパース return JSON.parse(addressJson.getContentText()); } |
できたスクリプトのトリガーを設定すれば完了です。
このスクリプトでは正常に住所が取得できない郵便番号が入力されたセルは赤色になるようにしています。