![見出し画像](https://assets.st-note.com/production/uploads/images/103908531/rectangle_large_type_2_2900a36db288aa57777e729141f09581.png?width=1200)
施設名から住所を取得しようとしたらつまずいた話(SpreadSheet+GAS)
やりたかったこと
生データに施設名のみ存在。施設名から住所を取得したかった。ただ、当該データは数百個あり、ひとつひとつ検索して調べるのは骨が折れる。
Google Apps Script(以下、GAS)およびGoogle Sheets(以下、スプレッドシート)を用いて自動取得する方法を発見。
しかしながら、早速上記サイトを参考に試してみたがいずれも上手くできず。
つまずいたところ
GASにてコーディングののち実行するとなぜかエラー(サンプルコードは後述)。
エラー
TypeError: Cannot read properties of null (reading 'getLastRow')
geocoder @ コード.gs:7
エラー文を読むと、スプレッドシート内のシートを読み込む最初の段階でエラーが吐かれていることがわかる。
なぜシートが読み込まれないのかがわからず四苦八苦。
とりあえずエラー文をググってみる。
同様の事例を発見。閲覧数4,355(記事作成時点)。困ってる人結構いるのかな?
しかしベストアンサーを見ても解決には至らず。
その後、ChatGPTに尋ねてみたがこちらも解決には至らず。
解決方法
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('hogehoge');
上記部分の'hogehoge'にファイル名を入れて実行していたことがエラー発生の原因だった。
'hogehoge'にはシート名を入れる(もちろんシート名はシングルクォーテーションで囲む)。
シート指定するんだからシート名が必須だろと思い返せば当たり前の話だが、なぜかファイル名を入れてしまい困り果てていた。
これでなんとか実行できた。
サンプルコード
function geocoder() {
const START_ROW = 2;
const FACILITY_COL = 1;
const ADDRESS_COL = 2;
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('**YOUR SHEET NAME**');
var lastrow = spreadsheet.getLastRow();
for(var i=START_ROW; i<=lastrow; i++){
var facility = spreadsheet.getRange(i,FACILITY_COL).getValue();
var geocoder = Maps.newGeocoder();
geocoder.setLanguage('ja');
var response = geocoder.geocode(facility);
if(response['results'][0] != null){
spreadsheet.getRange(i,ADDRESS_COL).setValue(response['results'][0]['formatted_address']);
}
}
}
スプレッドシート内、拡張機能>Apps ScriptよりGASを開く。
上記サンプルコードをコピペ(**YOUR SHEET NAME**をシート名に変更する)。
スプレッドシート内についてはあらかじめ、A2、A3、A4…セルに住所を取得したい施設名を打ち込んでおく(A1セルは見出しとして使う。施設名等と入力しておくとわかりやすい)。
開いたGASより実行*1をすると、スプレッドシート内のB2、B3、B4…セルに住所が自動で出力される。
コードは冒頭で紹介したサイトのものを参考にしました。感謝します。
出力結果
![](https://assets.st-note.com/production/uploads/images/103909784/picture_pc_506bdbbf13e1b6e2614ad711d8d8af50.gif)
施設名に不備があると住所が返されない。ただ生データがそこそこしっかりしてれば9割9分なにかしら返される。
GoogleMapsのマイマップを使えば、作成したデータをインポートしてマッピングすることも可能(擬似GIS?)。
*1 初回は権限云々の許可が要求される。
この記事が気に入ったらサポートをしてみませんか?