2023年03月22日 更新

スプレッドシートのチェックボックスがチェックされたら右隣のセルに何かを記述する方法

どうも、クラゲジュニアです。

Googleスプレッドシートにて、A1セルにあるチェックボックスにチェックされたら、右隣のセルに本日の日付を記述するケースで説明します。

関数とGAS(Google Apps Script)で検証しました

[TOC]

関数のみによる方法

チェックボックス右隣のセルに以下を記述するだけです。

=if(A1, TODAY(),"")

A1セルがTRUEの場合はTODAY()FALSEの場合は何も表示しないという処理です。ちなみに時刻まで取得したい場合はNOW()が使えます。

この記述のデメリットは、久しぶりにスプレッドシートを開いたり、別のデバイスでスプレッドシートを開くと、その時点の日付で上書き更新されてしまうことです。

関数とGASを使った方法

本日の日付を取得する部分をGASにすることも可能です。

GASに以下を記述

function today_script() {
  today = new Date();
  return today;
}

チェックボックス右隣のセルに以下を記述

=if(A1, today_script(),"")

ただし、この場合でも結果は同じで、上書き更新されてしまうデメリットは解消されません。

解決策として、スプレッドシートにボタンを作ってボタンが押されたときにスクリプトを実行する処理で代替することも可能ですが、承認が必要となります。承認は設定や管理が煩わしいので避けたいです。

GASのみによる方法

承認せずにスプレッドシートのセルをGASで編集できる方法があります。それは、シンプルトリガーonEditを使う方法です。onEditはスプレッドシートに変更があると呼ばれる関数で、簡単な処理であれば承認なしに使うことができます。

GASに以下を記述

function onEdit(e) {
  if (e.value === 'TRUE') {
    today = new Date();
    e.range.offset(0, 1).setValue(today);
  }
}

offset(0, 1)は、チェックボックスから行方向に0 列方向に1ずれた位置、つまり右隣のセルを意味しています。

この方法であれば、久しぶりに開いたり他のデバイスで開いたとしても勝手に更新されることはありません。

参考

以上です。