Google Apps Script(GAS)でチェックボックス押下時の時刻を固定する方法

JavaScript

Google Apps Script (GAS) を使って、チェックボックスを押すと時刻が記録される機能を作成した場合、スプレッドシートを開いたときにその時刻が更新されてしまう問題に直面することがあります。この記事では、この問題を解決するための方法を詳しく解説します。

1. チェックボックス押下時に時刻が固定されない原因

現在のコードでは、`getFormattedTimestamp()` 関数を使って現在時刻を取得しています。しかし、`getFormattedTimestamp()` はスプレッドシートを開くたびに再評価され、時刻が更新されてしまいます。これは、GASが動的に時刻を取得しているためです。

これを避けるためには、時刻を一度だけ設定し、その後は変更しないようにする必要があります。

2. 時刻を固定する方法

時刻を固定するためには、チェックボックスがオンになった時点での時刻をセルに記録する方法が有効です。以下のように、チェックボックスがオンになったときにその時刻を記録するコードに変更しましょう。

function onEdit(e) {\n  var sheet = e.source.getActiveSheet();\n  var range = e.range;\n  var value = range.getValue();\n  if (value === true) {\n    var timestamp = getFormattedTimestamp();\n    sheet.getRange(range.getRow(), 2).setValue(timestamp);\n  } else {\n    sheet.getRange(range.getRow(), 2).setValue('');\n  }\n}\nfunction getFormattedTimestamp() {\n  var now = new Date();\n  var year = now.getFullYear();\n  var month = ('0' + (now.getMonth() + 1)).slice(-2);\n  var day = ('0' + now.getDate()).slice(-2);\n  var hours = ('0' + now.getHours()).slice(-2);\n  var minutes = ('0' + now.getMinutes()).slice(-2);\n  var seconds = ('0' + now.getSeconds()).slice(-2);\n  return year + '/' + month + '/' + day + ' ' + hours + ':' + minutes + ':' + seconds;\n}

上記のコードでは、`onEdit()` トリガーを使ってチェックボックスの状態が変更された際に、時刻が2列目にセットされます。これにより、チェックボックスがオンになった時の時刻が固定され、再度開いても更新されることはありません。

3. コードの説明

このコードのポイントは、`onEdit()` トリガーを使用している点です。これにより、ユーザーがスプレッドシート内で行った編集が即座に反映され、チェックボックスがオンになった場合にのみ時刻が設定されます。

また、`getFormattedTimestamp()` は、年、月、日、時間、分、秒をフォーマットして返す関数です。これにより、時刻がスプレッドシートに適切に表示されます。

4. 時刻を固定する他の方法

もし、`onEdit()` トリガーを使わずに手動で時刻を記録したい場合、Googleフォームと連携させる方法や、特定のセルにユーザーが入力した時点で時刻を記録する方法もあります。しかし、`onEdit()` トリガーを使用する方法が最もシンプルで実用的です。

まとめ

GASでチェックボックスを押すとその時刻が記録される機能を作成する際に、時刻がスプレッドシートを開くたびに更新される問題は、`onEdit()` トリガーを使ってチェックボックスがオンになった時の時刻を記録することで解決できます。この方法を使えば、時刻が固定され、再評価されることなく安定した動作を実現できます。

コメント

タイトルとURLをコピーしました