2022/07/15に更新

【GASで節約】2地点間の所要時間、交通費を調べる

地図スプレッドシート

出発地点、到着地点を入力すると所要時間、費用、移動距離が出力されるGoogle Apps Scriptです。

こんな悩みを解決します


  • 交通費の精算状況をチェックしたいが、申請された金額が正しいのか調べるのが大変!

用意するもの


特にありません。今お使いのスプレッドシートに組み込めます。

このスクリプトで出来ること


  • 出発地点と到着地点を入力すると、所要時間、金額、移動距離が出力されます。
  • 複数の経路があればその数だけ出力されます。
  • このスクリプトは「Maps サービス」を利用しています。

使い方


1.スクリプトの実行

上のメニューにある「スクリプト実行」から「2地点間の所要時間と費用を調べる」を実行します。

出発地点が聞かれますので入力します。著名なランドマーク、住所など柔軟に入力可能です。

次に到着地点を聞かれますので入力します。キャンセルを押した場合はスクリプトが終了します。

2.結果の確認

少し待つと結果がシートに書き込まれます。
E列の所要時間についてですが、経路探索はスクリプト実行時間を出発時間として実行しています。返ってきた到着時刻から出発時間を引いた時間を所要時間としています。

Google Map Direction queryは無料ユーザーで1,000回/day、有償プランだと10,000回/dayです。上限にお気をつけください!

Google Map Direction queryは無料ユーザーで1,000回/day、有償プランだと10,000回/dayです。上限にお気をつけください!

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00120/index.html
 */

function onOpen() {
  // スプレッドシートを開いたときに実行される関数

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // メニューの表示名
  const menu = ui.createMenu('スクリプト実行');

  // メニューに追加するボタン
  menu.addItem('2地点間の所要時間と費用を調べる', 'survey_move_time_and_fare');

  // メニューを画面に追加する
  menu.addToUi();
}


function survey_move_time_and_fare() {

  const ui = SpreadsheetApp.getUi();

  const from = ui.prompt('出発地点を入力してください', ui.ButtonSet.OK_CANCEL);
  if (from.getSelectedButton() == ui.Button.CANCEL) {
    return;
  }

  const to = ui.prompt('目的地を入力してください', ui.ButtonSet.OK_CANCEL);
  if (to.getSelectedButton() == ui.Button.CANCEL) {
    return;
  }

  // 経路探索を行う
  const finder = Maps.newDirectionFinder();
  finder.setOrigin(from.getResponseText()); // 入力された出発地点をセット
  finder.setDestination(to.getResponseText()); // 入力された到着地点をセット
  finder.setAlternatives(true); // ベストパスだけではなく、代替経路も出力する
  finder.setLanguage('ja'); // 日本語を指定
  const now = new Date(); // 出発時間をセットするため、現在時刻を取得
  finder.setDepart(now); // 出発時間をセット
  finder.setMode(Maps.DirectionFinder.Mode.TRANSIT) // 移動手段として電車を指定。BYCYCLING / WALKING / DRIVING も選択可
  const directions = finder.getDirections(); // 経路探索を実行

  // アクティブなスプレッドシートを開く
  const ss = SpreadsheetApp.getActiveSpreadsheet();

  // アクティブなシートを開く
  const sheet = ss.getActiveSheet();

  // 返ってきた経路の数だけループ
  for (let i = 0; i < directions['routes'].length; i++) {

    // わかりやすくするため、変数入れ直し
    let route = directions['routes'][i];

    // 必要な値を取得する
    let fare = route['fare']['value']; // 交通費(運賃)
    let start_address = route['legs'][0]['start_address']; // 開始地点の住所
    let end_address = route['legs'][0]['end_address']; // 到着地点の住所
    let arrival_time = route['legs'][0]['arrival_time']['value']; // 到着時刻(UNIXTIME)
    let distance = route['legs'][0]['distance']['value'] / 1000; // 移動距離。メートルで返ってくるので1000で割ってkmにする

    let duration = Math.round((arrival_time - (now.getTime() / 1000)) / 60); // 到着時刻から現在時刻を引いて所要時間とする。60で割って分にする。

    // シートに書き込む
    sheet.appendRow(['経路' + (i + 1), start_address, end_address, fare + '円', duration + '分', distance + 'km']);

  }
}

関連するアプリ


タグ一覧

最新のアプリ

人気のアプリ

ページトップに戻る
myfunc.jp