チェックボックスを判定するときは、セルの値だけでなく、チェックボックスとして有効な状態かを確認します。
1セルずつisCheckedを使うと、既定のTRUE/FALSEとカスタム値の両方を扱えます。
練習コード・入力JSON・文字変換ブックをダウンロード(ZIP)できます。
この練習ではZIP内のarticle-222.jsか、以下に掲載したコードを使います。
記事ごとに別のApps Scriptプロジェクトを使い、新規の練習データを対象にしてください。
以下は2026年10月2日のローカル模擬検証の記録です。
共通のGASサンプル全体では51項目をローカルの模擬環境で確認しています。
2026年10月28日には配布コードとの一致を確認し、チェック状態の集計や設定不足の7項目を模擬試験しました。
試験ではisChecked()の戻り値を模擬しており、Google側の入力規則の動作を再現したものではありません。
Googleへの認可、実シートの入力規則・標準値・カスタム値での判定は未検証です。
入力例:A2:H2にチェックボックスを並べる
新規シートの1行目を項目名、A2:H2をチェックボックスにします。
A2:H2を選択し、「挿入」→「チェックボックス」で設定して、D2だけをチェックします。
| プロパティ | 設定値 |
|---|---|
| SPREADSHEET_ID | 練習ブックのID |
| SHEET_NAME | チェックボックスを置いたシート名 |
「拡張機能」→「Apps Script」を開き、プロジェクトの設定で上のスクリプトプロパティを指定します。
次のコードを保存し、checkPracticeBoxesを選んで実行します。
初回にアクセス許可を求められたら、練習ブックを読む処理であることを確認して承認してください。
実行ログのcheckedCount、anyChecked、invalidCountを、次の確認表と照合します。
この関数は状態を読み取り、結果をログへ出すだけです。
値の書き換えや通知送信は行いません。
function checkPracticeBoxes() {
const props = PropertiesService.getScriptProperties();
const id = props.getProperty('SPREADSHEET_ID');
const name = props.getProperty('SHEET_NAME');
if (!id || !name) throw new Error('SPREADSHEET_IDとSHEET_NAMEを設定してください');
const sheet = SpreadsheetApp.openById(id).getSheetByName(name);
if (!sheet) throw new Error('対象シートがありません');
const range = sheet.getRange('A2:H2');
const cells = [];
for (let col = 1; col <= range.getNumColumns(); col++) {
// 1セルずつ判定すると、チェックと未チェックの混在を扱えます。
const state = range.getCell(1, col).isChecked();
cells.push({column: col, state: state === true ? 'checked' : state === false ? 'unchecked' : 'invalid'});
}
const result = {
anyChecked: cells.some(x => x.state === 'checked'),
checkedCount: cells.filter(x => x.state === 'checked').length,
invalidCount: cells.filter(x => x.state === 'invalid').length,
cells: cells
};
console.log(JSON.stringify(result));
return result;
}
模擬検証の結果と実シートでの確認点
| 条件 | 結果 |
|---|---|
| D2だけチェック | checkedCount:1、anyChecked:true、invalidCount:0 |
| すべて未チェック | checkedCount:0、anyChecked:false、invalidCount:0 |
| G2のチェックボックスの入力規則を削除する | invalidCountが増える |
| カスタムのオン/オフ値 | 1セルごとのisCheckedで判定する |
| セルに普通のTRUEだけを入れた | チェックボックスの入力規則がなければ有効なチェック扱いにしない |
| 同名の別シートを見ていた | SPREADSHEET_IDとSHEET_NAMEを確認する |
cellsのcolumnは1がA、4がD、8がHです。
stateはchecked、unchecked、invalidのいずれかです。
invalidCountが0でなければ、単に「全部未チェック」と判断せず、対象セルの入力規則や値を確認します。
範囲全体に1回だけisCheckedを呼ぶと、チェック済みと未チェックが混在した状態もnullになります。
この例は8セルを個別に読み取るので、その混在をinvalidとは扱いません。
大きな表へ広げる場合は、呼び出し回数が増えることも考慮します。
停止と戻し方
実行するだけではセルを変更しないため、停止時は関数を呼ばないだけです。
練習で外した入力規則は、そのセルにチェックボックスを設定し直します。
カスタム値を使っていた場合は、元のオン・オフの値とチェック状態も戻してください。
設定し直してから再実行し、invalidCountが0になったか確認します。
カスタム値の設定はGoogleのチェックボックス資料を参照してください。
既存の通知やトリガーへ組み込む場合は、状態判定を手動で確認してから行います。
公式資料
Range.isCheckedの仕様とカスタム値の例を参照してください。
関連記事・旧実装の参考資料
旧GitHubコードや外部の参考例は、現在の記事のZIPと異なる場合があります。
今回の練習は本文のセル番地・プロパティ・ZIPをそろえて実行してください。





チェックボックスの判定についてよくある質問
チェックボックスの判定は、セルの値を見るだけでよいですか?
それだけでは足りません。
セルの値だけでなく、チェックボックスとして有効な状態かどうかを確認します。
1セルずつisCheckedを使うと、既定のTRUE/FALSEとカスタム値の両方を扱えます。
セルに普通のTRUEを入れた場合は、チェック済みになりますか?
チェックボックスの入力規則がなければ、有効なチェック扱いにしません。
チェックボックスとして設定されたセルかどうかを、確認してください。
範囲全体にisCheckedを1回だけ呼ぶと、どうなりますか?
チェック済みと未チェックが混在した状態は、nullになります。
この例は8セルを個別に読み取るので、その混在をinvalidとは扱いません。
大きな表へ広げる場合は、呼び出し回数が増えることも考慮します。
invalidCountが0でないときは、どう読みますか?
単に「全部未チェック」と判断せず、対象セルの入力規則や値を確認します。
たとえば、練習でG2のチェックボックスの入力規則を削除すると、invalidCountが増えます。
カスタムのオン/オフ値を使っている場合は?
1セルごとのisCheckedで判定します。
Range.isCheckedの仕様とカスタム値の例は、公式資料で確認してください。
結果が合わないときは、何を確認しますか?
同名の別シートを見ていないか、SPREADSHEET_IDとSHEET_NAMEを確認します。
cellsのcolumnは、1がA、4がD、8がHです。
このコードは、シートの値を書き換えますか?
いいえ。
状態を読み取り、結果をログへ出すだけです。
値の書き換えや通知送信は行いません。
停止するときは、関数を呼ばないだけです。
この記事のコードは、動作確認済みですか?
共通のGASサンプル全体では51項目をローカルの模擬環境で確認しています。
チェックボックス判定の対象と結果は本文の確認表に示します。
Googleへの認可、実シートの入力規則・標準値・カスタム値での判定は未検証です。
まず新規の練習データで試してください。
