徹底解説!GASでチェックボックスの判定と動的な追加・削除、メール送信をマスターする方法

GASでスプレッドシートのチェックボックスを操作したいんですけど、どうやって判定や追加・削除すればいいのかよくわからなくて…
猫男
猫男
catman
catman
よし、catmanがGASでチェックボックスの各操作をわかりやすく解説しよう!まずはチェックボックス判定からだ。

 

GASでチェックボックスを判定する方法

チェックボックスの状態を判定するのはとてもシンプル。

チェックされている場合はTRUE、されていない場合はFALSEになる。

GAS チェックボックス 判定

ってことで、セルの値を取得して、それがTRUEかどうかを確認しよう。以下のスクリプトはA1にチェックボックスがある想定だ。


function checkCheckboxStatus() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = sheet.getRange("A1");
  var value = range.getValue();
  
  if (value === true) {
    Logger.log("チェックボックスはオンです。");
  } else {
    Logger.log("チェックボックスはオフです。");
  }
}

SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()はアクティブなスプレッドシートを取得する。

getRange(“A1”)でセルA1を指定し、getValue()でその値を取得。判定は単なる条件分岐で完了だ。

なるほど!チェックボックスを動的に追加したり外すにはどうしたらいいんですか?
猫男
猫男

 

GASでチェックボックスを動的に追加・削除・外す方法

チェックボックスを操作してみよう。

チェックボックスを追加する(初期値は false)

まずはチェックボックスそのものを追加する方法を紹介しよう。

チェックボックスはデータ検証ルールをセットして追加できるんだ。 さらに、最初に false を入れておけば、未チェックの状態から始められる。


function addCheckbox() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = sheet.getRange("A2");
  var rule = SpreadsheetApp.newDataValidation().requireCheckbox().build();
  range.setDataValidation(rule); // チェックボックスを設定
  range.setValue(false); // 初期値を未チェックに
 }

SpreadsheetApp.newDataValidation()でデータ検証の設定を開始し、requireCheckbox()でチェックボックスを指定。

build()でルールを作り、setDataValidation(rule)でセルに反映させる。

そのあと、setValue(false)でチェックを外した状態にしておくのがポイントだ。

チェックボックスを完全に削除する

チェックボックス自体を消したいときは、データ検証をクリアすればいい。 あわせて中身(true/false)も消すなら、clearContent()も使おう。


function removeCheckbox() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = sheet.getRange("A2"); range.clearDataValidations(); // チェックボックスを削除
  range.clearContent(); // 値も消す
}

clearDataValidations()はセルからチェックボックスの設定を取り除いてくれる。clearContent()は値そのものも削除する命令だ。

チェックボックスを外す(falseに戻す)

チェックを解除したいときは、チェックボックス自体は残したまま、値だけ false にすればOK。


function uncheckCheckbox() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = sheet.getRange("A2");
  range.setValue(false); // チェックを外すだけ
 }

見た目は変わらないけど、「未チェック」に戻すだけならこの方法で十分だ。

 

えっ、チェックボックスにチェックを入れたい?

そんなときは値をfalseじゃなくてtrueにしてみよう。

できました!次は、チェックボックスがオンになったらメールを送信してみたいです。
猫男
猫男

 

GASでチェックボックスの状態に応じたメール送信

チェックボックスがオンになったときにメールを送信するには少し工夫が必要だ。

「スプレッドシートが編集された瞬間」に反応するonEdit(e) 関数を使えば、チェックボックスがオンになった瞬間にメール送信できる。

次のスクリプトは、A列にチェックボックスがある想定だ。


function onEdit(e) {
  var range = e.range;
  var sheet = range.getSheet();
  
  // A列を対象にする
  if (sheet.getName() === "シート1" && range.getColumn() === 1) {
    var value = e.value;

    // チェックが入った(trueになった)ときだけメール送信
    if (value === "TRUE") {
      GmailApp.sendEmail(
        "example@example.com",
        "チェックされました",
        range.getA1Notation() + " のチェックボックスがオンになりました。"
      );
    }
  }
}

GmailApp.sendEmail()では、第一引数に受信者のメールアドレス、第二引数に件名、第三引数にメール本文を設定する。

すごい!これでGASを使ってチェックボックス操作ができるようになった気がします!
猫男
猫男
catman
catman
その調子だ!

 

練習問題

スプレッドシートのB1セルにチェックボックスを追加して、オンになったときに「チェックボックスがオンになりました」という内容で自分宛にメールを送信するスクリプトを作成してください。メールの件名と本文を自由に設定できるようにしなさい。

 

 

解答・解説


function onEdit(e) {
  var range = e.range;
  var sheet = range.getSheet();

  // B1セルが対象かどうか確認
  if (sheet.getName() === "シート1" && range.getA1Notation() === "B1") {
    if (e.value === "TRUE") {
      GmailApp.sendEmail(
        "your-email@example.com",
        "チェックされました",
        "B1のチェックボックスがオンになりました!"
      );
    }
  }
}

  • onEdit(e): ユーザーがスプレッドシートを編集したときに自動で呼ばれる関数。手動では実行できない。
  • e.range: 編集されたセルの位置を表す。
  • range.getSheet(): 編集されたシートを取得。
  • range.getA1Notation(): 編集されたセルの位置(例:"B1")を文字列で取得。
  • e.value === "TRUE": チェックボックスがオンになったときだけ実行。
  • GmailApp.sendEmail(): メールを送信する命令。