すべてのシートを対象に、保護されたセルをすべて解除する Google Apps Scriptです。保護をまとめて解除したいときにどうぞ。
特にありません。今お使いのスプレッドシートに組み込めます。
適当に保護をかけてみました。スクリーンショットには写っていませんが、シート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 + '個の保護を解除しました!')
}
}