2022/06/30に更新

【GASで時短】2つのセルの時間差を計算する

スプレッドシート小技

2つのセル(日付・日時型)を選択すると、差分の日数や時間を計算してくれるGoogle Apps Scriptです。スプレッドシート関数でも出来ますが、任意のセルでちょっと計算したいときに。

こんな悩みを解決します


  • 日付の差分がどのぐらいか調べたい・・けどわざわざセルに関数を入れるのはめんどくさい

用意するもの


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

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


  • 2つのセル(日付・時刻型)を比較し、日数・時間・分・秒の差がどのぐらいあるのか計算して表示できます。

使い方


1.スクリプトの実行

連続した日付と、連続した秒のサンプルデータを用意しました。

まず日付を計算してみます。2つのセルを選択します。

上部メニューの「スクリプト実行」から「2つの日付の差を計算する」を実行します。

結果が表示されます。差分は5日ちょうどで、問題なさそうですね。

日時型のほうでも試してみます。

差分は6秒とでました。大丈夫そうです。

2.エラーメッセージ

2つのセルが選択されていない場合は、「2つのセルを選択してから実行してください (Ctrl or Commandを使って1セルずつ2つのセル範囲の選択が必要です)」というエラーメッセージが表示されます。

2つのセルのうち、日付や日時型ではないものが含まれると計算ができません。「日付型の値が入っているセルを選択してください」というエラーメッセージが表示されます。

スクリプト


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

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

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

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

  // メニューに追加するボタン
  menu.addItem('2つの日付の差を計算する', 'calculate_between_two_cells');

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

function calculate_between_two_cells() {

  const ui = SpreadsheetApp.getUi();

  // 開いているスプレッドシートオブジェクトを取得
  const ss = SpreadsheetApp.getActiveSpreadsheet();

  // 開いているアクティブシートのオブジェクトを取得
  const sheet = ss.getActiveSheet();

  // 現在選択されているセルの範囲オブジェクトを取得
  const active_ranges = sheet.getActiveRangeList().getRanges();

  // 選択範囲が2個ではない場合は計算出来ないのでアラートを出してスクリプトを終了する
  if (active_ranges.length != 2) {
    ui.alert('2つのセルを選択してから実行してください\\n(Ctrl or Commandを使って1セルずつ2つのセル範囲の選択が必要です)');
    return;
  }

  // セルの値をそれぞれ取得する
  let value1 = active_ranges[0].getValue();
  let value2 = active_ranges[1].getValue();

  // セルの値が日付型かどうかチェックし、どちらかが異なる場合はアラートを出して終了する
  if (
    Object.prototype.toString.call(value1) != '[object Date]' ||
    Object.prototype.toString.call(value2) != '[object Date]') {

    ui.alert('日付型の値が入っているセルを選択してください');
    return;
  }

  // 計算するためのミリ秒に変換する
  value1 = new Date(value1).getTime();
  value2 = new Date(value2).getTime();

  // 日付の差を計算し、絶対値を取る(セルの選択順によってはマイナスになりうるため)
  const diff = Math.abs(value1 - value2);

  // 各単位でそれぞれ計算する
  const diff_days = diff / 1000 / 60 / 60 / 24; // 日数の計算
  const diff_hours = diff / 1000 / 60 / 60; // 時間の計算
  const diff_minutes = diff / 1000 / 60; // 分の計算
  const diff_seconds = diff / 1000; // 秒の計算

  // メッセージを組み立てて、結果を画面に表示する
  const message = `2つのセルの時間差は
  日数だと${diff_days}日
  時間だと${diff_hours}時間
  分だと${diff_minutes}分
  秒だと${diff_seconds}秒
  です`;

  ui.alert(message);

}

関連するアプリ


【GASで便利に】シート内のすべての数式を表示する

シートに入力されている全ての数式を、別シートに出力するGoogle Apps Scriptです。数式のセル参照が連鎖していて、確認が大変だったので作ってみました。

【GASで時短】数式エラーが出ているセルを通知する

数式でエラーが出ているセルを探してくれるGoogle Apps Scriptです。巨大なシートだとエラーに気づかないこともある・・・?ということで作ってみました。

【GASで便利に】数式が入っているセルに色を付ける

シート内の数式が入っているセルを探して、色を付けてくれるGoogle Apps Scriptです。他の人から引き継いだシートだと、数式がどこにあるのかわかりにくいので作ってみました。

【GASで時短】シート内の数式だけを削除する

セルに入力されている数式をすべて消し去るGoogle Apps Scriptです。数式を多用してデータを作ったが、再計算することはないので数値が直接入力されている状態にしたい時・・・などに。

【GASで時短】2つのシートの差分をチェックする

2つのシートを比較して、値や数式に差分があるかどうか教えてくれるGoogle Apps Scriptです。スプレッドシートでもdiffがしたい!という時にどうぞ。

【GASで時短】セルの編集内容をすべてのシートに反映させる

シートに対する変更内容(値の変更)を、同じファイルのすべてのシートに反映(同期)させるGoogle Apps Scriptです。

タグ一覧

最新のアプリ

人気のアプリ

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