質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.77%

GASでスプレッドシートのセル内にメソッドを記載し更新させたい。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,026

dendenmushi

score 83

前提・実現したいこと

Googleスプレッドシートの1セルに値を入れてその値をGASの引数にして、その横のセルに返却値を表示したい。

実装内容

function method_geo(address) {
  if (address === '') {
    return
  }
  var api_url = "https://maps.googleapis.com/maps/api/geocode/json?address=" + encodeURI(address);
  api_url += '&key=[API Keyをここに書きました。]'
  var response = UrlFetchApp.fetch(api_url);
  var result = JSON.parse(response);
  var location = result['results'][0]
  if (typeof location === 'undefined') {
    return
  }
  location = location['geometry']['location']
  return {lat: location['lat'], lon: location['lng']}
}


APIを有効にし、Keyも発行しソースコードに記載しました。
イメージ説明

式を入れて更新しても、GASの

発生している問題・エラーメッセージ

イメージ説明

試したこと

①スプレッドシートの右側セルに=コード.gs.method_desu(A1)とGASと連携するために記述⇒状況かわらず
②GASの黒▲実行押下⇒状況変わらず
③おそらくマニュアルにのっている基礎内容だと思うのですがそのページを探したのですが見つけられず

方法は2つあると思っています。1つはGASのjapascript記載でスプレッドシートのセルを指定して実行操作する方法。もうひとつはGASにメソッドだけ作り、スプレッドシートのセル内にメソッド記載して実行表示する方法。後者の方で利用したいです。どなたかアドバイスよろしくお願い致します。

補足情報(FW/ツールのバージョンなど)

win10
Google App Script

自己解決した部分(2019/06/02追記)

頂いた膨大なマニュアルの中自分が目当てとするところがどうしても見つけられず他サイトを探したところ、以下が見つかりました。

スプレッドシートからスクリプトエディタを開く

私が連携を取れなかった原因は、今までスプレッドシートとGASを別々に作成していたために連携が取れなかったということがわかりました。

まだ残る課題

リターン値でエラーが起きてしまいました。

var idotokeido = ""←ステートメントに;がありませんエラー
str idotokeido = ""←ステートメントに;がありませんエラー

function geo(address) {
  if (address === '') {
    return
  }
  var api_url = "https://maps.googleapis.com/maps/api/geocode/json?address=" + encodeURI(address);
  api_url += 'APIキー'
  var response = UrlFetchApp.fetch(api_url);
  var result = JSON.parse(response);
  var location = result['results'][0]
  if (typeof location === 'undefined') {
    return
  }
  location = location['geometry']['location']
  location['lat']
  idotokeido = str(location['lat']) + "," + str(location['lng'])←indexに1がありませんエラー
  idotokeido = location['lat'] + "," + location['lng']←indexに1がありませんエラー
  return idotokeido
}


ひとつのセルに12345,6789というように緯度経度を出したいのですが、そもそもstrではなくvar宣言が間違っているのでしょうか。GASの文法にはstrがそもそもなく自動認識varとして記載してもだめでした。

エラーがなくなるが0になってしまった

+ではなく&で繋げました。
でもリターンが0としてスプレッドシートには表示されてしまいました。

var tr = ""
function geo_method(address) {
  if (address === '') {
    return
  }
  var api_url = "https://maps.googleapis.com/maps/api/geocode/json?address=" + encodeURI(address);
  api_url += 'APIキー'
  var response = UrlFetchApp.fetch(api_url);
  var result = JSON.parse(response);
  var location = result['results'][0]
  if (typeof location === 'undefined') {
    return
  }
  location = location['geometry']['location']
  tr = location['lat'] & "," & location['lng']
  return tr
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • papinianus

    2019/06/03 09:33

    これを
    > tr = location['lat'] & "," & location['lng']
    こうしたらよいのでは?
    > tr = location['lat'] + "," + location['lng']

    キャンセル

  • dendenmushi

    2019/06/03 11:49

    ありがとうございます。それを起こったのですが、indexが1ではありませんエラーと;がありませんエラーが連発してしまいました…

    キャンセル

  • papinianus

    2019/06/03 19:11

    どういうエラーか翻訳せずそのままにして、また行数を書いてください。もしくはapiキーの取得方法を教えて下さい

    キャンセル

  • dendenmushi

    2019/06/05 22:13

    すいません今気付きました。回答訂正提案ありがとうございます。なんとか対応策得ることができました。お手数おかけして申し訳ありませんでした。

    キャンセル

回答 2

checkベストアンサー

+1

マニュアルは以下です。

Extending Google Sheets 
Spreadsheet Service 

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/06/02 07:44

    ありがとうございます。私はスプレッドシートとスクリプトをばらばらに作っていたために連携ができていませんでした。ただreturnの『適切に処理』がいまだにできず苦戦しております。お手数ですがご教授頂けないでしょうか。

    キャンセル

  • 2019/06/02 09:35

    今のコードはご自身で書かれたものですか?
    ご自身の行いたい処理を明確にして、それを実装するのが適切です。

    私が検証のために動かしたコードでは、(検証のために表示できればよかったので) return の際、文字列にしてみました。

    キャンセル

  • 2019/06/03 11:48

    一番上にある初めの緯度経度取得コードはgoogle検索で見つけたコードになります。自分なりに作ってみます。文字列で行ってみます。回答ありがとうございました。

    キャンセル

0

①スプレッドシートを作成して、そこからスクリプトを選択すれば連携できるようになった。

②リターン値におけるエラーはlng lat 緯度経度を別々にしてobject型ではなく出力するようにしてスプレッドシートの別の列に出すようにして2列出力するようにしたことでエラーが起きなくなりました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る