2022/06/12に更新

【GASで時短】セルの保護をすべて解除する

スプレッドシート

すべてのシートを対象に、保護されたセルをすべて解除する Google Apps Scriptです。保護をまとめて解除したいときにどうぞ。

こんな悩みを解決します


  • セルの保護を一度すべて解除したい!けど1個ずつ手動でやりたくない!

用意するもの


特にありません。今お使いのスプレッドシートに組み込めます。

このスクリプトで出来ること


  • セルにかけられている「保護」をすべて解除することができます。
  • 対象は開いているスプレッドシートの全シートです。

使い方


1.スクリプトの実行

適当に保護をかけてみました。スクリーンショットには写っていませんが、シート2でもセルを保護しています。

上のメニューにある「スクリプト実行」から「セルの保護をすべて解除する」を実行します。

実行してもよいか確認を求められます。キャンセルが押された場合はスクリプトが終了します。

2.結果の確認

処理が完了すると「N個の保護を解除しました!」とメッセージが表示されます。
右側の保護設定を見ると確かに消えています。

もう一度スクリプトを実行してみました。
今回は保護設定が消え去ったあとなので「保護されているセルはありませんでした!」と表示されました。

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00102/index.html
 */

function onOpen() {
  // スプレッドシートを開いたときに実行される関数

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // メニューの表示名
  const menu = ui.createMenu('スクリプト実行');

  // メニューに追加するボタン
  menu.addItem('セルの保護をすべて解除する', 'release_all_protect');

  // メニューを画面に追加する
  menu.addToUi();
}

function release_all_protect() {

  // 画面にアラートを表示するためにUIオブジェクトを取得
  const ui = SpreadsheetApp.getUi();

  // 実行の確認メッセージを表示する
  const response1 = ui.alert('全シートのセルの保護をすべて解除します\n\nよろしいですか?', ui.ButtonSet.OK_CANCEL);

  // キャンセルが押されたらスクリプトを終了する
  if (response1 == ui.Button.CANCEL) {
    return;
  }

  // スプレッドシートオブジェクトを取得
  const ss = SpreadsheetApp.getActiveSpreadsheet();

  // すべてのシートを取得
  const sheets = ss.getSheets();

  // 最後に解除した数を表示するために、カウンター用の変数を定義
  let counter = 0;

  // シートの数だけループ
  for (let i = 0; i < sheets.length; i++) {

    // セルの保護設定を取得する
    let protects = sheets[i].getProtections(SpreadsheetApp.ProtectionType.RANGE);

    // 保護設定の数だけループ
    for (let j = 0; j < protects.length; j++) {

      // セルの保護設定を削除
      protects[j].remove();

      // カウンターを増加
      counter++;
    }

  }

  // 解除した数に応じて、メッセージを出し分ける
  if (counter == 0) {
    ui.alert('保護されているセルはありませんでした!');
  } else {
    ui.alert(counter + '個の保護を解除しました!')
  }
}

関連するアプリ


タグ一覧

最新のアプリ

人気のアプリ

myfunc.jp