㌰クラ雑記

㌰㌰クラゲの雑な戯言です

Google Apps Script (GAS) で、スプレッドシートの特定のセルのチェックボックスをチェックしたら、特定のセルに日付を入力する

こんにちは。家事をやった日付をみえるようにするといいだろうということで、今後どうするかはわからないけど、いったんGoogle Spreadsheetでメモしておくことにしました。ちょっとだけ躓いたので同じようなことやりたい人たちのためにブログに残しておきます。

なお、スマホからだとGAS編集自体は難しいので、GASの編集についてはPCからの操作しか説明しません。

(要件である、「チェックボックスをチェックしたら日付が入力される」動作はスマホでも動作確認しています。)

想定しているのは下記のような動きです。

f:id:picopicoclage:20220312161856g:plain
gif

設定方法

PCでスプレッドシートを開いて、メニューから「拡張機能→Apps Script」をクリックします。

エディタが開くので、左上のロゴの隣にあるプロジェクト名(デフォルトは「無題のプロジェクト」だったかな?)をクリックして、分かりやすいプロジェクト名に変更します。

ファイル、ライブラリ、サービス、などがある左のメニューから、現在開かれている .gs を選んで、右側に出てくる三点ボタンをクリックし、「名前を変更」を選んで、スクリプトの名前を決めて入力して確定します。

開いているエディタに下記のスクリプトを貼り付けます。

function getDateToday() {
  let date = new Date();
  return Utilities.formatDate(date, 'Asia/Tokyo','yyyy/MM/dd');
}

// onEdit(e)関数は、シートが編集されたときに動くコールバック関数
// これはスマホでも動く
function onEdit(e) {
  // 基本的な情報
  const sheetName = e.range.getSheet().getSheetName();
  const row = e.range.getRow(); // 編集された行
  const column = e.range.getColumn(); // 編集された列
  const targetColumn = 4 // D列(日付を挿入する対象の列。A列を1としてBが2、Cが3…)
  // 判定用フラグ
  const isTargetSheet = (sheetName == "シート名");
  const isTargetCheckboxEdited = (column == 2); // B列
  // 判定して処理
  if(isTargetSheet && isTargetCheckboxEdited) {
    SpreadsheetApp
    .getActiveSheet()
    .getRange(row,targetColumn)
    .setValue(getDateToday());
    SpreadsheetApp
    .getActiveSheet()
    .getRange(row,column)
    .setValue(false);
  }
}

エディタの上側にあるメニューの保存ボタンを押して保存する。

これで動きます。