MENU

GASでチェックボックスの値を正しく読む

当ページのリンクには広告(PR)が含まれていることがあります。
GASでチェックボックスの値を正しく読む。チェックボックス、設定値を確認、未選択と不正値の処理例。

チェックボックスの列を読んだのに、"FALSE"まで処理対象になる場合は、値を真偽値へ変える方法を確認します。JavaScriptでは空でない文字列は真として扱われるので、if (value)だけでチェック状態を判断すると意図とずれることがあります。

GASでは、セルがチェック状態かを調べるisCheckedを使えます。戻り値にはtrueとfalseだけでなくnullもあるため、未チェックと不正な状態を分けます。以下はチェック済みの行番号を確認する読み取り専用の例です。

目次

標準値とカスタム値を分ける

通常のチェックボックスでは、取得した値は真偽値のtrueかfalseです。入力規則でチェック時を「送信対象」、未チェック時を「保留」のように変えると、セルの値もその設定に応じた文字列になります。

同じ見た目のチェックボックスでも、値が同じとは限りません。既存シートを引き継ぐ際は、まず入力規則を開き、チェック時と未チェック時の値を確認してください。文字列の"true"をJavaScriptのtrueと同じものとして比較しないようにします。

公式のRangeのisCheckedでは、カスタム値を持つセルの例と、不正値でnullになる例が示されています。値を直接読む方法との違いはスプレッドシートの読み書きから確認できます。

セルごとに状態を判定する

複数セルの範囲へ一度だけisCheckedを呼ぶと、全体の状態を確認することになります。行ごとに処理対象を選ぶなら、各セルを個別に調べます。

function checkedRows(range) {
  if (range.getNumColumns() !== 1) {
    throw new Error('チェック列を1列だけ指定してください');
  }
  const selected = [];
  for (let i = 1; i <= range.getNumRows(); i++) {
    const state = range.getCell(i, 1).isChecked();
    const row = range.getRow() + i - 1;
    if (state === null) {
      throw new Error('チェック欄の入力規則と値を確認: ' + row + '行目');
    }
    if (state === true) selected.push(row);
  }
  return selected;
}

function previewCheckedRows() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet()
    .getSheetByName('チェック練習');
  if (!sheet) throw new Error('チェック練習シートがありません');
  console.log(JSON.stringify(checkedRows(sheet.getRange('A2:A4'))));
}

練習用のA2:A4へチェックボックスを入れ、A2とA4をオン、A3をオフにします。期待するログは[2,4]です。カスタム値に変えても、入力規則と値が一致していれば同じ行番号を選ぶ想定です。ここではメールの送信やセルの更新は行いません。

nullを未チェックへ置き換えない

入力規則を消したセルや、設定と違う値が入ったセルは、そのまま「未チェック」と扱わないようにします。処理済みか未処理かを決められない状態を見逃すと、必要な行を対象から外してしまうためです。

上のコードは不明なセルが1つでもあれば全体を止めます。不正な行だけを別リストへ出して処理を続ける設計もありますが、その場合は保留した行と理由が残るようにしてください。nullを無条件にfalseへ変えると、その違いが失われます。

練習ではA3の入力規則を一度外し、3行目を示すエラーになるかを確認します。次に規則を戻し、3セルすべてをオン・すべてをオフにして、対象行の数を比べます。チェックの混在だけでなく、不正な状態も含めて確認することがポイントです。

対象行の記録と処理結果を分ける

チェック済みであることと、後続の処理が完了したことは別です。送信対象のチェックを先に外してしまうと、途中で失敗した行を見失うことがあります。実際の処理を追加するときは、対象IDと結果の記録も用意します。

この例の分岐はローカルの代用セルで確認しました。Google上のチェックボックス操作や大量行の実行時間は未確認です。行ごとのサービス呼び出しが増えるため、大きな表では対象範囲を絞り、必要に応じて値と入力規則の一括取得を検討してください。

チェック欄を台帳で使う前に、対象・処理・完了をどう記録するかは在庫と台帳更新の設計で整理できます。

この記事を書いた人

Watanabeのアバター Watanabe サイト運営者

2020年よりブログ開始。
SEOが思いのほか性にあっていたようで現在に至る。
モットーは「勝率の高い選択をする」
AIは活用するが吉、最後は人間が息を吹き込む。
アートと科学を追求し、日々精進。
―――
収益:6~7桁をウゴウゴ。
サイト:ペラサイト~中規模サイトまで運営中。
案件:1000円以上の案件をメインに取組中。
打ち手:ブラックSEO~ホワイトSEOまで
―――

目次