数式の入った欄を誤って書き換えないために、スプレッドシートの範囲を保護できます。ただし「警告を表示する」設定では、確認を続ければ編集できます。保護という名前だけで、特定の人以外は変更できない状態だと判断しないことが大切です。
GASのProtectionでは、警告のみかどうかをisWarningOnlyで確認できます。まず練習用の表に警告を付ける例を使い、編集者を制限する設定と何が違うかを整理します。共有ファイルの編集者を一括で削除する処理は使いません。
警告と編集制限の選び分け
警告のみの保護は、編集前に確認画面を出すためのものです。共同作業者に変更を禁止する仕組みではありません。うっかりした操作へ気づくきっかけが必要な欄に使います。
特定の担当者だけが数式を変えられるようにしたい場合は、編集者を制限する保護を選びます。ファイルそのものを編集できる権限と、その範囲の編集を認める権限は別に確認します。所有者やグループ、ドメイン由来の権限も関係するため、自分のアカウントで編集できたことだけでは他の人の状態は分かりません。
公式のProtectionリファレンスは、setWarningOnly(true)が確認の警告であることを説明しています。機密情報を見せないための方法は、保護ではなくGASの共有範囲と権限で扱う共有設定から分けて考えます。
練習用の範囲へ警告を付ける
シート「保護練習」のD2:D5を対象にします。既に範囲保護があるシートでは止まるようにし、設定が重なるまま増やさない例です。
function configurePracticeWarning(sheet, apply) {
const kind = SpreadsheetApp.ProtectionType.RANGE;
const existing = sheet.getProtections(kind);
if (existing.length > 0) throw new Error('既存の範囲保護を画面で確認してください');
const range = sheet.getRange('D2:D5');
const plan = {sheet: sheet.getName(), range: 'D2:D5', warningOnly: true};
if (apply === true) {
const protection = range.protect();
protection.setDescription('練習用の数式欄');
protection.setWarningOnly(true);
if (!protection.isWarningOnly()) throw new Error('警告設定を確認してください');
}
return plan;
}
function previewRangeWarning() {
const APPLY = false;
const sheet = SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName('保護練習');
if (!sheet) throw new Error('保護練習シートがありません');
console.log(JSON.stringify(configurePracticeWarning(sheet, APPLY)));
}
APPLY:falseでは設定を変更しません。シート名と範囲が練習用コピーであることを確認した後、実際に警告を試すときだけtrueへ変えます。保護の作成後に処理が失敗する場合もあるので、エラーが出たら再実行する前に管理画面の保護一覧を確認してください。
画面で編集制限を確かめる
警告を作った後は、スプレッドシートの保護設定から対象範囲を選び、警告のみの設定を確認します。練習用コピーでセルを編集し、確認を続けた場合に変更できることを確かめます。これは編集制限とは違う動作です。
実際に編集者を限定する場合は、対象者と変更後の作業を先に確認し、画面で編集できるユーザーを指定します。普段の共同作業を止めないよう、対象範囲を狭くして確認してください。設定後は、制限を受けるアカウントでも操作できる範囲を確かめます。
「セルを変えられない」と「値を読めない」は同じではありません。保護した範囲でも、共有相手が表の内容を見たりコピーしたりできる場合があります。閲覧権限の管理を、セル保護に任せないようにします。
エラーが出た場合に戻る場所
保護設定の変更権限がない、既存の保護がある、実行する利用者が想定と違う、といった点を順に調べます。既存の編集者を全削除してやり直す方法は、共有作業の前提を変えるため避けます。
掲載コードは、ローカルの代用Protectionで、変更しない分岐、警告を付ける呼び出し順、既存保護の拒否を確認しました。Google上の警告画面とアカウント別の編集制限は未確認です。失敗箇所を追う際は実行履歴とエラーログを利用してください。
