セル範囲を操作する

【GAS】スプレッドシートでセル範囲を保護する

GASでスプレッドシートでセル範囲を保護するには「protect()」を利用する。

protect()

権限を持つユーザーのみが範囲を編集できないように保護するオブジェクトを作成します。スクリプトが範囲の編集者のリストを実際には変更するまで(Protection.removeEditor(emailAddress)、Protection.removeEditor(user)、Protection.removeEditors(emailAddresses)、Protection.addEditor(emailAddress)、Protection.addEditor(user)、Protection.addEditors(emailAddresses) を呼び出すか、Protection.setDomainEdit(editable) に新しい値を設定するまで)、権限はスプレッドシート自体のものをミラーリングします。つまり、実際には範囲は保護されていません。範囲がすでに保護されている場合、このメソッドは既存の範囲と重複する新しい保護範囲を作成します。セルが複数の保護範囲で保護されており、いずれかの範囲で特定のユーザーがセルを編集できない場合、そのユーザーはセルを編集できません。

https://developers.google.com/apps-script/reference/spreadsheet/range#protect

スプレッドシートでセル範囲を保護するGAS実行の様子

protect()メソッドを利用して、スプレッドシートでセル範囲を保護するGASを実行してみました。

protect()メソッドを有効化したことで、

  • 任意のセル範囲が保護された

ことがわかります。

また、任意のセッションユーザー以外は編集できないよう設定がなされています。

スプレッドシートで任意セルから指定した行数・列数分移動する場合は、以下記事を御覧ください。

参照記事:【GAS】スプレッドシートで任意セルから指定した行数・列数分移動する

スプレッドシートでセル範囲を保護するGAS

function protect(){
  //SpreadsheetAppを起動
  let ss = SpreadsheetApp.getActiveSpreadsheet();
  //0番目のシートを取得
  let sht = ss.getSheets()[0];
  //保護するセル範囲をrangeに格納
  const range = ss.getRange("A2:B10");
  //保護範囲にテキストを設置
  for (let i=2;i<=10;i++){
    const text = [
      ["保護した","セル範囲"]
    ];
    sht.getRange(i,1,1,2).setValues(text);
  }
  //range範囲を保護し名前を付与
  const protects = range.protect().setDescription("保護したセル範囲");
  //スクリプトの実行権限があるセッションユーザーをmeに格納
  const me = Session.getEffectiveUser();
  //ユーザーmeは保護範囲を編集できるように
  protects.addEditor(me);
  //保護したセル範囲を編集できるデフォルトのユーザー設定を削除
  protects.removeEditors(protects.getEditors());
  //保護したセル範囲の編集権限を持っているか確認
  if(protects.canDomainEdit()){
    protects.setDomainEdit(false);
  }
}

protect()の戻り値

Protection - 保護設定を表すオブジェクト。

スプレッドシートでセル範囲を保護するまとめ

GAS×スプレッドシートでセル範囲を保護するならprotect()メソッドを利用しましょう。

関連記事:【GAS】スプレッドシートの範囲をセル結合する

関連記事:【GAS】スプレッドシートにチェックボックスを挿入する

関連記事:【GAS】スプレッドシートに検証がオン状態のチェックボックスを挿入する

関連記事:【GAS】スプレッドシートにオン / オフ値があるチェックボックスを挿入する

関連記事:【GAS】スプレッドシートのチェックボックスがチェック済みか確認する

-セル範囲を操作する