はじめに
スプレッドシートでタスク管理をしていると、現在の日時を入力したいときってありますよね。
セルを選択した状態で以下のようにコマンドすると日時を入力できるんです。(Mac)
コマンド | 入力内容 |
---|---|
Cmd + Shift + ; |
時間が入力できる 例) 15:30:03
|
Cmd + Option + Shift + ; |
日付と時間が入力できる 例) 2024/12/27 15:30:42
|
でも…
「チェックボックスに ✔ つけたら、その時の時刻が入力されてほしいな〜」
と思うことがあったので、Google Apps Script(以下、GAS) を使用して実装してみました。
完成イメージ
以下のスクショが完成イメージです。
C列にチェックボックスがあり、✔ をつけると同行のD列に時刻が入力されるようにします。
D2
のセルには =returnTimestamp(C2)
という値が入っています。
実装
チェックボックスの出し方
こちら に記載の通りで簡単にチェックボックスを追加することができます。
以下、手順からの抜粋です。
2. チェックボックスを挿入するセルを選択します。
3. 上部のメニューで [挿入] 次へ [チェックボックス] の順にクリックします。
GASで関数を作成
D列で使用する returnTimestamp
という関数はGASを使って作成しています。
次の手順で作成していきます。
- 上部メニュー [拡張機能] で [Apps Script] をクリックしてGAS画面を開く
- 画面上部のファイル名を適当に変更しる
- 以下のスクリプトをコピーし、エディタへ貼り付けて保存する
function returnTimestamp(value) {
if (value === true) {
return getFormattedTimestamp();
}
return "";
}
function getFormattedTimestamp() {
var now = new Date();
var year = now.getFullYear();
var month = ("0" + (now.getMonth() + 1)).slice(-2); // 月は0から始まるので+1
var day = ("0" + now.getDate()).slice(-2);
var hours = ("0" + now.getHours()).slice(-2);
var minutes = ("0" + now.getMinutes()).slice(-2);
var seconds = ("0" + now.getSeconds()).slice(-2);
return year + "/" + month + "/" + day + " " + hours + ":" + minutes + ":" + seconds;
}
作成したスクリプトを呼び出す
チェックボックスがあるセルが C2
なので、
D2
のセルには =getFormattedTimestamp(C2)
を入力します。
あとは C2
のチェックボックスに ✔ をつけてみてください。
D2
セルに現在時刻が入力されます。
さいごに
以前は =if(C2=TRUE,NOW(),"")
で同様のことが出来ていたんですが、
いつからかこの式だと「別の行の ✔ に反応して全部の時刻が現在の時間に更新される」という挙動になってしまうようになりました。
というわけで、GASを使って実装する経緯となりました。
もっといいやり方あるよ〜って方は、ぜひ教えていただけると助かります!