「保護の設定をしたはずなのに、なぜか警告メッセージが出ない……」そんな経験はありませんか?Googleスプレッドシートで範囲を保護して「この範囲を編集するときに警告を表示する」を選んだのに、共有メンバーが普通に編集できてしまう。あるいは、自分自身が保護したセルを編集しても何も聞かれない。チームで使っているスプレッドシートだからこそ、この「警告だけ出ない」問題は放置すると大きな事故につながります。
この記事では、Googleスプレッドシートの保護範囲で警告が出ない原因を徹底的に洗い出し、初心者から上級者まで確実に解決できる方法をお伝えします。さらに、2026年3月時点のGoogle公式ドキュメントやSheets APIの最新仕様もふまえた、他の記事にはない実践的なノウハウを盛り込んでいます。
- 保護範囲の「警告表示」が出ない7つの原因と、それぞれの具体的な対処法を網羅的に解説
- オーナー権限・Excel形式・ブラウザ環境など見落としがちな落とし穴をすべてカバー
- GAS(Google Apps Script)やSheets APIを使った上級者向けの警告設定テクニックも紹介
- そもそもスプレッドシートの「保護範囲の警告」とは何なのか?
- 原因1自分がオーナーまたは編集権限者になっている
- 原因2Excel形式(.xlsx)のまま編集している
- 原因3保護設定で「警告を表示」を選んでいない
- 原因4保護範囲がズレている、または重複している
- 原因5ブラウザのキャッシュや拡張機能が干渉している
- 原因6スマホアプリから操作している
- 原因7Googleアカウントの切り替えミス
- 上級者向けGASやSheets APIで警告設定を管理する方法
- 警告型と制限型の違いを整理する
- トラブルを未然に防ぐための運用ベストプラクティス
- 情シス歴10年以上の現場視点で語る「保護の警告」が機能しない本当の理由
- 現場で頻発する「保護の制限型と警告型の二重設定」問題を完全解説
- 退職者が残した保護設定を引き継ぐときの正しい手順
- GASで保護設定を一括監査するスクリプト
- GASで「制限型の保護が警告型に勝手に変わっていないか」を自動検知するスクリプト
- GASで複数範囲に一括で警告型保護をかけるスクリプト
- GASで全保護を一括解除するスクリプト(緊急用)
- 「保護をコピーしたのに新しいファイルで警告が出ない」問題の正体
- フィルタ表示と保護の意外な関係
- 条件付き書式で保護範囲を視覚的に「自分専用の警告」にする裏ワザ
- 変更履歴と保護を組み合わせた「事後追跡」の考え方
- GASで「保護範囲を編集したユーザーを自動記録する」スクリプト
- Google Workspace管理者だからこそ知っておくべき「ドメイン全体の保護ポリシー」
- 「保護しているのにAppSheetから書き換えられる」という盲点
- ぶっちゃけこうした方がいい!
- Googleスプレッドシートで保護範囲の警告だけが出ないときによくある質問
- 今すぐパソコンやスマホの悩みを解決したい!どうしたらいい?
- まとめ
そもそもスプレッドシートの「保護範囲の警告」とは何なのか?
Googleスプレッドシートの保護機能には、大きく分けて2つのモードがあります。ひとつは「この範囲を編集できるユーザーを制限する」という完全ブロック型。もうひとつが「この範囲を編集するときに警告を表示する」という警告型です。
警告型の保護は、編集そのものをブロックするわけではありません。誰かが保護範囲のセルを変更しようとすると、「実行してもよろしいですか?」という確認ダイアログが表示され、「OK」を押せばそのまま編集できます。つまり、うっかりミスを防ぐための「安全装置」のような役割を果たすわけですね。
この仕組みは、たとえば計算式が入ったセルを「触っちゃダメ」とまでは言わないけれど「本当に変えて大丈夫?」と一呼吸おかせたい場面にぴったりです。月次の集計表やチーム共有の予算シートなど、複数人が同時に触るファイルで重宝します。
ところが、この警告が設定したのに出ないという現象がしばしば起こります。「保護しているはずなのに素通りできてしまう」状態は、せっかくの安全装置が機能していないのと同じ。ここからは、その原因をひとつずつ掘り下げていきましょう。
原因1自分がオーナーまたは編集権限者になっている
これが最も多い「警告が出ない」原因です。実はGoogleスプレッドシートの仕様として、スプレッドシートのオーナー(所有者)は、警告型の保護でも警告が表示されません。オーナーは常にすべてのセルを編集できる最上位の権限を持っており、保護の対象外として扱われます。
さらに、「この範囲を編集できるユーザーを制限する」で編集者に追加されたユーザーも、警告型の保護では警告が出ないケースがあります。つまり、保護を設定した本人が「ちゃんと設定できているか確認しよう」と自分で編集してみても、警告は表示されないのです。
どう確認すればいいのか?
保護の動作を正しく確認するには、自分以外のアカウントでスプレッドシートを開いてテストする必要があります。別のGoogleアカウントを持っていない場合は、同僚や友人にお願いして保護範囲のセルを編集してもらい、警告ダイアログが表示されるかどうかを確認してください。
Google Apps Scriptの公式リファレンス(2026年3月12日更新)でも、
canEdit()
メソッドの説明に「スプレッドシートのオーナーは常に保護された範囲を編集できる」と明記されています。これは仕様であり、バグではないという点を理解しておきましょう。
原因2Excel形式(.xlsx)のまま編集している
意外と見落としがちなのが、ファイル形式の問題です。ExcelファイルをGoogleドライブにアップロードして、そのまま.xlsx形式で開いている場合、スプレッドシートの保護機能がフルに使えません。Google公式のヘルプにも「保護されているシートと範囲が表示されない場合は、Microsoft Officeファイルの編集機能を使用している可能性があります」と注意書きがあります。
この状態では、「データ」メニューに「シートと範囲を保護」の項目自体が表示されなかったり、表示されても警告型の保護が正しく動作しなかったりします。
解決するための手順
- 対象ファイルを開いた状態で、上部メニューの「ファイル」をクリックします。
- 「Googleスプレッドシートとして保存」を選択します。
- 変換後のファイルが新しいタブで開くので、そちらで改めて保護設定を行います。
変換後は元のExcelファイルとは別のファイルになります。チームで共有している場合は、新しいファイルのURLを共有し直すことを忘れないでください。
原因3保護設定で「警告を表示」を選んでいない
「保護を設定した=警告が出るようになった」と思い込んでいるケースも少なくありません。保護の権限設定画面で表示される選択肢は2つあり、「この範囲を編集するときに警告を表示する」と「この範囲を編集できるユーザーを制限する」は別物です。
「ユーザーを制限する」を選んで「自分のみ」に設定した場合、他のユーザーが編集しようとしても警告ではなく「保護されているため編集できません」というエラーが表示され、編集自体がブロックされます。警告を出したいのか、完全にブロックしたいのか、目的に合った設定を選び直しましょう。
設定の確認と変更方法
「データ」メニューから「シートと範囲を保護」を開くと、右側のサイドパネルに現在設定されている保護の一覧が表示されます。確認したい保護をクリックし、「権限を変更」を押すと、現在どちらのモードが選択されているかが分かります。「警告を表示する」に切り替えたい場合は、ここでラジオボタンを変更して「完了」を押すだけです。
原因4保護範囲がズレている、または重複している
保護を設定したつもりでも、実際に保護されている範囲が意図したセルとズレていることがあります。たとえば、A1:D10を保護したかったのにA1:D9しか保護されていなかった、というケースです。この場合、10行目のセルを編集しても当然ながら警告は出ません。
また、同じ範囲に対して複数の保護設定が重複して適用されていると、予期しない挙動が起こることがあります。ある保護では「警告を表示」に設定しているのに、別の保護で「ユーザーを制限」が設定されていると、制限のほうが優先されて警告ではなく完全ブロックになるパターンもあります。
保護範囲を視覚的に確認する方法
Googleスプレッドシートには、保護されている範囲を視覚的に表示する便利な機能があります。メニューから「表示」→「表示」→「保護されている範囲」をクリックしてチェックを入れると、保護範囲のセルに斜線の網掛けが表示されます。これを使えば、どのセルが保護されているか一目瞭然です。
意図した範囲と実際の保護範囲が一致しているか、この機能で必ず確認する習慣をつけましょう。
原因5ブラウザのキャッシュや拡張機能が干渉している
Googleスプレッドシートはブラウザ上で動作するクラウドアプリケーションです。そのため、ブラウザのキャッシュが古くなっていたり、インストールしている拡張機能がスプレッドシートの動作を妨げていたりすると、保護の警告が正常に表示されないことがあります。
とくに広告ブロッカーやスクリプト制御系の拡張機能は、Googleスプレッドシートが使うJavaScriptをブロックしてしまう可能性があります。その結果、警告ダイアログが抑制されてしまうのです。
切り分けのためのチェック方法
まず、ブラウザのシークレットモード(Chromeの場合は
Ctrl + Shift + N
)でスプレッドシートを開いてみてください。シークレットモードでは拡張機能が無効化されるため、拡張機能が原因かどうかを切り分けられます。シークレットモードで警告が正しく表示される場合は、通常モードで拡張機能をひとつずつ無効にして原因を特定しましょう。
それでも改善しない場合は、ブラウザのキャッシュとCookieをクリアしてから再度試してみてください。クリアの際はGoogleアカウント関連のデータだけを対象にすると、他のサイトのログイン情報を失わずに済みます。
原因6スマホアプリから操作している
スマートフォンやタブレットのGoogleスプレッドシートアプリでは、保護機能に大きな制限があります。2026年現在でも、モバイルアプリからは保護設定の新規作成・変更・削除ができません。保護範囲を編集しようとしたときの警告ダイアログも、アプリ版では表示されない、または表示が不安定になることがあります。
スマホのブラウザでPC版サイトを表示させてアクセスしても、「アプリをダウンロードしてください」と促されるだけで、ブラウザ上での編集自体ができないケースが多いのが現実です。
保護の警告が正しく動作しているか確認したいときや、保護設定を変更したいときは、必ずパソコンのブラウザからアクセスしてください。iPadなどのタブレットであれば、SafariやChromeで「デスクトップ用Webサイト」を表示させることで、PC版と同等の操作が可能になる場合もあります。
原因7Googleアカウントの切り替えミス
個人用のGmailアカウントと会社のGoogle Workspaceアカウントなど、複数のGoogleアカウントを使い分けている人に起こりやすい問題です。保護設定を行ったアカウントとは別のアカウントでスプレッドシートを開いてしまうと、権限の状態が変わり、警告の挙動が期待通りにならないことがあります。
たとえば、会社のアカウントがオーナーで保護設定をしたファイルを、個人のGmailアカウントで開いた場合、そもそもアクセス権限がなかったり、逆に別の権限レベルで開いてしまったりします。画面右上のプロフィールアイコンをクリックして、正しいアカウントでログインしているかを確認しましょう。
上級者向けGASやSheets APIで警告設定を管理する方法
ここまでの原因と対処法で多くのケースは解決できますが、大規模なスプレッドシートを運用している場合や、保護設定を自動化したい場合には、Google Apps Script(GAS)やSheets APIを活用する方法も知っておくと便利です。
GASで警告型の保護を設定する
GASのProtectionクラスには
setWarningOnly(true)
というメソッドがあり、これを使うとプログラムから警告型の保護を設定できます。たとえば、以下のようなスクリプトでSheet1全体に警告型の保護をかけることができます。
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
const protection = sheet.protect().setDescription('警告保護');
protection.setWarningOnly(true);
このスクリプトを実行すると、Sheet1に対して警告型の保護が設定されます。
isWarningOnly()
メソッドで現在の設定を確認することもできるので、「本当に警告型になっているか?」をプログラム的に検証する際にも使えます。
Sheets APIでwarningOnlyを制御する
Sheets APIの
Update
を使うと、
AddProtectedRangeRequest
の中で
"warningOnly": true
を指定することで警告型の保護を作成できます。Google公式の開発者ドキュメント(2026年3月2日最終更新)にもサンプルコードが掲載されており、複数の保護設定を一括で管理したい場合に非常に強力です。
逆に、意図せず
"warningOnly": false
になっている保護がないかをAPIで一括チェックし、問題のある設定を修正するといった運用も可能です。大量の保護設定を手作業で確認するのは現実的ではないため、定期的にAPIやGASでチェックスクリプトを走らせることをおすすめします。
警告型と制限型の違いを整理する
ここで改めて、2つの保護モードの違いを表で整理しておきましょう。混同していると「警告が出ない」のか「ブロックされている」のか正しく判断できなくなります。
| 項目 | 警告型(警告を表示する) | 制限型(ユーザーを制限する) |
|---|---|---|
| 編集時の挙動 | 確認ダイアログが出るが、OKを押せば編集可能 | 権限のないユーザーは編集そのものが不可 |
| オーナーへの影響 | オーナーには警告が表示されない | オーナーは常に編集可能 |
| 用途 | うっかりミスの防止。チーム全員に注意喚起したいとき | 特定の担当者以外には絶対に触らせたくないとき |
| GASでの設定 |
setWarningOnly(true)
|
setWarningOnly(false)
(デフォルト) |
| APIでの設定 |
"warningOnly": true
|
"warningOnly": false
|
この表を見ると分かるように、オーナーに対して警告が表示されないのは仕様です。もし自分がオーナーで「自分自身にも警告を出したい」という場合は、残念ながらGoogleスプレッドシートの標準機能では実現できません。代替案としては、条件付き書式でセルの背景色を変えて視覚的に注意を促す方法や、GASで独自の確認ダイアログを実装する方法があります。
トラブルを未然に防ぐための運用ベストプラクティス
保護の警告が出ない問題を根本的に防ぐには、日頃の運用ルールを整えることが大切です。以下のポイントを押さえておけば、チームでスプレッドシートを安全に共有できます。
まず、保護設定を行ったら必ず別のアカウントで動作確認をしてください。自分がオーナーの状態で「ちゃんと警告が出るかな?」とテストしても意味がありません。テスト用のGoogleアカウントをチームで1つ用意しておくと便利です。
次に、保護を設定するときは「説明」欄に目的を記入することを徹底しましょう。「経理部の月次集計式を保護」「マスターデータ変更不可」など、具体的に書いておくと、後から他のメンバーが保護の意図を理解しやすくなります。
そして、「表示」→「表示」→「保護されている範囲」を定期的に確認し、保護がかかっているセルに網掛けが表示されることをチームメンバーにも周知しておきましょう。「どこが保護されているか分からない」という状態が、誤編集や混乱の温床になります。
最後に、Excelファイルをそのまま使い回さないこと。チームでの共有時には必ずGoogleスプレッドシート形式に変換してから保護設定を行ってください。.xlsx形式のままだと保護機能がフルに使えず、思わぬトラブルの原因になります。
情シス歴10年以上の現場視点で語る「保護の警告」が機能しない本当の理由
ここまで読んでくださった方は、保護範囲の警告が出ない主要な原因と対処法をすでに理解しているはずです。ただ、正直に言うと、実務の現場ではもっとやっかいなパターンが山ほど存在します。ここからは、長年にわたって企業のGoogle Workspace環境を設計・運用してきた情シスの視点から、他のサイトでは絶対に語られない「リアルな落とし穴」と「泥臭い解決策」を共有していきます。
まず声を大にして言いたいのが、Googleスプレッドシートの警告型保護はそもそも「ザル」であるという事実です。警告ダイアログが表示されても「OK」ボタンにフォーカスが当たった状態で出てくるため、ユーザーがEnterキーを連打していると一瞬で突破されてしまいます。「あれ、なんか出た?まあいいや」で終わるんです。これは仕様であり、Googleが意図的に「あくまで軽い注意喚起」として設計している証拠です。
つまり、情シスとして本気でデータを守りたいなら、警告型保護だけに頼る運用設計は最初からやめたほうがいいというのが私の持論です。警告型はあくまで「ちょっと待って」の合図であり、「絶対に触らせない」ための仕組みではありません。この前提を理解したうえで、では現場でどう使いこなすかを掘り下げていきます。
現場で頻発する「保護の制限型と警告型の二重設定」問題を完全解説
実務で最もハマりやすいのが、同じ範囲に対して「制限型」と「警告型」の保護を二重にかけてしまうパターンです。たとえば、あなたがシート全体に「警告型」の保護を設定したとします。その後、別の担当者がA列だけ「自分のみ編集可」の制限型保護を追加しました。この状態になると、A列のセルを編集しようとした他のユーザーには「保護されているため編集できません」というエラーが出て、警告ダイアログは一切表示されません。
「警告を出したかっただけなのに、なぜか完全にブロックされている」という問い合わせが社内から来たとき、原因はたいていこの二重設定です。厄介なのは、保護設定の一覧画面で両方の設定が並んで見えるため、どちらが優先されているのか直感的にわかりにくい点です。
二重設定の具体的な解消手順
- 「データ」→「シートと範囲を保護」を開いて、右側のサイドパネルに表示される保護設定の一覧をすべて確認します。
- 各保護をクリックして「権限を変更」を押し、「警告型」なのか「制限型」なのかをひとつずつ書き出します。
- 同じセル範囲やシートに対して複数の保護が設定されている場合、目的に応じてどちらかを削除するか、範囲が重複しないように調整します。
ポイントとして、シート保護と範囲保護は別カウントになることを覚えておいてください。「シート1全体をシート保護で警告型にした」のと別に、「シート1のA1:Z100を範囲保護で制限型にした」場合、範囲保護のほうが実質的に優先されます。これを知らないと、延々と原因不明の沼にハマります。
退職者が残した保護設定を引き継ぐときの正しい手順
情シスとして10年以上やっていて、最も問い合わせが多いのが実はこのパターンです。前任者が退職してしまい、その人がオーナーだったスプレッドシートの保護設定を誰も変更できない、というケースですね。
Googleスプレッドシートの保護設定を変更・解除できるのは、原則として保護を設定した本人かスプレッドシートのオーナーだけです。前任者がオーナーだった場合、その人のアカウントが無効化されると保護を解除できなくなるのでは?と思われがちですが、実はGoogle Workspaceの管理者であれば対処できます。
Google Workspace管理者ができること
Google Workspaceの管理コンソールから、退職者のアカウントのオーナーシップを別のユーザーに一括移行することが可能です。具体的には、管理コンソールの「ユーザー」→対象ユーザー→「データの移行」で、ドライブ内のすべてのファイルのオーナーシップを後任者に移せます。オーナーシップが移れば、後任者が保護設定を自由に変更・解除できるようになります。
ただし注意点があります。オーナーシップの移行はファイル単位で行われるため、特定のシートだけの保護権限が移るわけではありません。ファイル全体のオーナーが変わるという点を理解しておきましょう。
もしGoogle Workspaceではなく、個人のGoogleアカウント(無料Gmail)でスプレッドシートを運用していた場合、退職者のアカウントが削除されると、オーナーシップの移行自体ができなくなります。この場合の唯一の解決策は、スプレッドシートのコピーを作成することです。「ファイル」→「コピーを作成」でコピーすると、コピーした人が新しいオーナーになり、元の保護設定はすべて解除されます。ただし、元のファイルとは別物になるため、共有リンクの再配布が必要です。
GASで保護設定を一括監査するスクリプト
保護の設定が増えてくると、どのシートのどの範囲にどんな種類の保護がかかっているのか、手作業で確認するのは現実的ではなくなります。そこで、スプレッドシート内のすべての保護設定を一覧表として自動出力するGASスクリプトを紹介します。情シスやスプレッドシートの管理者にとって、定期的な監査ツールとして非常に重宝するはずです。
function auditProtections() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheets = ss.getSheets();
const logSheet = ss.getSheetByName('保護監査ログ') || ss.insertSheet('保護監査ログ');
logSheet.clear();
logSheet.appendRow);
sheets.forEach(function(sheet) {
const protections = sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE)
.concat(sheet.getProtections(SpreadsheetApp.ProtectionType.SHEET));
protections.forEach(function(p) {
const range = p.getRange() ? p.getRange().getA1Notation() : 'シート全体';
const type = p.getProtectionType() === SpreadsheetApp.ProtectionType.SHEET ? 'シート' : '範囲';
const editors = p.isWarningOnly() ? '全員(警告のみ)' : p.getEditors().map(function(e) { return e.getEmail(); }).join(', ');
logSheet.appendRow);
});
});
SpreadsheetApp.getUi().alert('監査完了!「保護監査ログ」シートを確認してください。');
}
このスクリプトを実行すると、「保護監査ログ」という名前の新しいシートが作成され、すべてのシートのすべての保護設定がシート名・保護タイプ・範囲・警告型かどうか・説明・編集可能ユーザーという6列の表として一覧出力されます。これを月1回走らせるだけで「誰がどこに何の保護を設定しているか」が丸見えになるので、情シスとしては定期チェックに組み込むことを強くおすすめします。
GASで「制限型の保護が警告型に勝手に変わっていないか」を自動検知するスクリプト
現場で地味に困るのが、いつの間にか保護設定が書き換えられているケースです。編集者権限を持つユーザーが、保護設定を開いて「警告を表示する」に変更してしまうことがあります。悪意がなくても「なんかダイアログが出たからOKを押した」レベルの操作で設定が変わってしまうことがあるんです。
以下のスクリプトは、指定した範囲の保護が「制限型」のまま維持されているかをチェックし、もし警告型に変わっていたら自動でメール通知を送信するものです。時間主導型トリガーで毎日1回実行するように設定しておけば、設定の意図しない変更を早期に検知できます。
function checkProtectionIntegrity() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const adminEmail = Session.getActiveUser().getEmail();
const alerts = ;
ss.getSheets().forEach(function(sheet) {
const allProtections = sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE)
.concat(sheet.getProtections(SpreadsheetApp.ProtectionType.SHEET));
allProtections.forEach(function(p) {
if (p.getDescription().indexOf('') !== -1 && p.isWarningOnly()) {
alerts.push('シート「' + sheet.getName() + '」の保護「' + p.getDescription() + '」が警告型に変更されています。');
}
});
});
if (alerts.length > 0) {
MailApp.sendEmail(adminEmail, '【要確認】保護設定の意図しない変更を検知', alerts.join('\n'));
}
}
使い方のコツとして、保護設定時に「説明」欄へというキーワードを入れておきます。スクリプトはこのキーワードが含まれた保護だけをチェックし、もし警告型に変わっていたらアラートメールを飛ばすという仕組みです。説明欄のキーワードを使うことで、「すべての保護をチェックする」のではなく「本当に重要な保護だけを監視する」という柔軟な運用が可能になります。
GASで複数範囲に一括で警告型保護をかけるスクリプト
10個、20個の範囲にひとつずつ手動で保護を設定するのは、はっきり言って地獄です。特に月初めにテンプレートをコピーして新しい月次シートを量産する運用をしていると、毎回の保護設定だけで30分以上かかることもあります。以下のスクリプトを使えば、指定した複数の範囲に対して一括で警告型保護を設定できます。
function bulkWarningProtect() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const rangesToProtect = ;
rangesToProtect.forEach(function(rangeStr) {
const range = sheet.getRange(rangeStr);
const protection = range.protect().setDescription('一括警告保護: ' + rangeStr);
protection.setWarningOnly(true);
});
SpreadsheetApp.getUi().alert(rangesToProtect.length + '個の範囲に警告型保護を設定しました。');
}
rangesToProtect
の配列に保護したい範囲をA1形式で列挙するだけで使えます。月次テンプレートを運用している場合は、このスクリプトをテンプレートにあらかじめ仕込んでおき、シートコピー後にワンクリックで保護を適用するという流れにすると、作業時間が劇的に短縮されます。
GASで全保護を一括解除するスクリプト(緊急用)
「とにかく今すぐ全部の保護を外したい」という緊急事態は、長く運用していると必ず発生します。たとえば、決算期の追い込みでシートの構成を大幅に変更しなければならないとき、保護がかかっているセルのせいで列の挿入や削除ができない、という状況です。以下のスクリプトは、アクティブなスプレッドシートのすべての保護を一括で解除します。
function removeAllProtections() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
let count = 0;
ss.getSheets().forEach(function(sheet) {
sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE).forEach(function(p) {
if (p.canEdit()) { p.remove(); count++; }
});
sheet.getProtections(SpreadsheetApp.ProtectionType.SHEET).forEach(function(p) {
if (p.canEdit()) { p.remove(); count++; }
});
});
SpreadsheetApp.getUi().alert(count + '個の保護を解除しました。');
}
注意点として、このスクリプトは自分が解除権限を持っている保護のみを削除します。
canEdit()
メソッドで事前にチェックしているため、他人が設定した制限型保護で自分に権限がないものは安全にスキップされます。それでも、実行前に必ず前述の監査スクリプトで現状の保護一覧をバックアップとして取得しておくことを強く推奨します。一度解除した保護は復元できません。
「保護をコピーしたのに新しいファイルで警告が出ない」問題の正体
これは本当によくある問い合わせなのですが、テンプレートのスプレッドシートをコピー(「ファイル」→「コピーを作成」)したとき、元ファイルの保護設定は新しいファイルには引き継がれません。これはGoogleの仕様です。コピーしたファイルの所有者はコピーした人になるため、元ファイルの保護設定をそのまま持ち込むとセキュリティ上の問題が生じるからです。
「先月のシートをコピーして今月分を作ったのに、警告が出ないんです」という質問の答えは単純で、保護設定がコピーされていないからです。コピー先のファイルにはゼロから保護を設定し直す必要があります。毎月この作業が発生するなら、前述の一括保護スクリプトを活用してください。
ちなみに、GASを使って保護設定ごとコピーするスクリプトを組むことも技術的には可能です。元ファイルの保護情報を
getProtections()
で取得し、コピー先に
protect()
で再設定するという流れになりますが、編集者の一覧まで完全に引き継ぐにはかなり複雑なコードが必要になるため、運用コストを考えると「コピー後に一括保護スクリプトを走らせる」ほうが現実的です。
フィルタ表示と保護の意外な関係
共同編集中にフィルタを使ってデータを並べ替えると、その結果が他の編集者の画面にも反映されてしまう、という問題があります。これ自体は保護とは直接関係ないのですが、「保護をかけているのに他の人の操作で自分の画面が変わった」という問い合わせにつながることがあります。
解決策は「フィルタ表示」を使うことです。通常の「フィルタ」ではなく、「データ」→「フィルタ表示」→「新しいフィルタ表示を作成」を選ぶと、自分だけに適用されるフィルタが作成されます。この「フィルタ表示」は名前を付けて保存でき、他のメンバーにも共有できますが、あくまで各自が個別に使うものなので、他人の表示に影響しません。
保護設定と組み合わせて使うことで、「データ構造は触らせないけど、各自が好きな条件でデータを閲覧できる」という理想的な状態を作れます。これは意外と知らない人が多いので、チームに周知する価値があります。
条件付き書式で保護範囲を視覚的に「自分専用の警告」にする裏ワザ
前の記事でも触れたとおり、オーナーには警告型保護の警告ダイアログが表示されません。でも、オーナー自身も「ここは触っちゃダメだ」と視覚的に認識したい場面は多いですよね。そこで使えるのが、条件付き書式を使って保護範囲の背景色を変えるという方法です。
たとえば、計算式が入っているセルの背景を薄い赤色にする条件付き書式を設定しておけば、オーナーであっても「ここは計算式が入っているから触るな」という視覚的な注意喚起になります。条件付き書式の条件は「カスタム数式」で
=ISFORMULA(A1)
と設定すれば、数式が入っているセルだけ自動的に色が変わります。
この方法の良いところは、保護の権限に関係なく全員に見えることです。警告ダイアログは一瞬で消えますが、セルの背景色はずっと表示されたままなので、「ここは注意が必要なエリアだ」という情報が常に伝わります。
変更履歴と保護を組み合わせた「事後追跡」の考え方
ここまでは「いかに編集を防ぐか」という話をしてきましたが、現実問題として、すべてのセルを完璧に保護しきるのは難しいですし、そうすると業務の柔軟性が失われます。そこで情シスとして提案したいのが、「防ぐ」のではなく「追跡する」というアプローチです。
Googleスプレッドシートには「変更履歴」機能があり、「ファイル」→「変更履歴」→「変更履歴を表示」からいつでもアクセスできます。これを使えば、誰がいつどのセルをどう変更したかを遡って確認でき、必要に応じて以前のバージョンに復元することも可能です。
つまり、あまり厳密に保護をかけてチームの作業を窮屈にするよりも、「自由に編集させるけど、全部記録は残っているからね」という運用のほうが、チームの生産性とデータの安全性を両立できるケースが多いんです。保護は「本当に触られたら致命的な箇所」だけに絞り、それ以外は変更履歴でカバーする。このバランス感覚が、保護機能を使いこなすうえで最も重要だと私は考えています。
GASで「保護範囲を編集したユーザーを自動記録する」スクリプト
変更履歴はGUIでしか確認できないため、「特定の範囲が変更されたらSlackに通知したい」「ログシートに記録したい」というニーズには対応できません。そこで、
onEdit
トリガーを使って特定範囲の編集をログシートに自動記録するスクリプトを紹介します。
function onEdit(e) {
const watchRanges = ;
const editedRange = e.range;
const sheet = editedRange.getSheet();
const editedA1 = sheet.getName() + '!' + editedRange.getA1Notation();
let isWatched = false;
watchRanges.forEach(function(wr) {
const target = sheet.getRange(wr);
if (editedRange.getRow() >= target.getRow() && editedRange.getRow() <= target.getLastRow()
&& editedRange.getColumn() >= target.getColumn() && editedRange.getColumn() <= target.getLastColumn()) {
isWatched = true;
}
});
if (!isWatched) return;
const ss = SpreadsheetApp.getActiveSpreadsheet();
const logSheet = ss.getSheetByName('編集ログ') || ss.insertSheet('編集ログ');
if (logSheet.getLastRow() === 0) {
logSheet.appendRow);
}
logSheet.appendRow[
new Date(),
e.user ? e.user.getEmail() : '不明',
editedA1,
e.oldValue || '(空白)',
e.value || '(空白)'
]);
}
このスクリプトはシンプルトリガーの
onEdit
を使っているため、スクリプトエディタに貼り付けて保存するだけで動きます。特別なトリガー設定は不要です。
watchRanges
の配列に監視したい範囲を指定すれば、その範囲が編集されるたびに「編集ログ」シートに日時・編集者・対象セル・変更前の値・変更後の値が記録されます。
注意点として、シンプルトリガーの
onEdit
では
e.user
が取得できないケースがあります。確実にユーザー情報を取得したい場合は、インストーラブルトリガー(スクリプトエディタのトリガー設定から「編集時」を選んでセットするもの)を使ってください。インストーラブルトリガーの場合は関数名を
onEdit
以外(たとえば
onEditInstallable
)にする必要があることも覚えておいてください。
Google Workspace管理者だからこそ知っておくべき「ドメイン全体の保護ポリシー」
企業でGoogle Workspaceを使っている場合、管理者がドメイン全体に対してドライブの共有ポリシーを設定していることがあります。たとえば「組織外のユーザーとの共有を禁止する」「リンク共有を無効にする」などのポリシーです。
これらのポリシーは、スプレッドシートの保護機能とは別レイヤーの制御ですが、保護設定の「ドメインのみ」オプションに影響を与えます。「この範囲を編集できるユーザーを制限する」→「ドメインのみ」は、Google Workspaceのドメイン内ユーザー全員に編集権限を付与する設定です。これを選ぶと、社内の全社員がその範囲を編集できるようになる代わりに、社外のゲストユーザーは編集できなくなります。
ところが、管理者が「組織内のユーザーがファイルを編集できるようにする」設定を無効にしていると、「ドメインのみ」の選択肢自体が表示されないことがあります。「あれ?ドメインのみの選択肢がないぞ?」と困った場合は、Workspace管理者に共有ポリシーを確認してもらってください。
「保護しているのにAppSheetから書き換えられる」という盲点
最近増えているのが、GoogleスプレッドシートをデータソースとしてAppSheet(ノーコードアプリ開発ツール)を使っているケースでの問題です。AppSheetはスプレッドシートの保護設定を一切認識しません。Google公式のドキュメントにも明記されていますが、AppSheetは行単位でデータを更新する際に、保護されたセルも含めてすべてのセルを上書きしようとします。
そのため、AppSheet経由でデータを更新しようとすると、保護されたセルへの書き込みがエラーになる場合があります。逆に、AppSheetのアクセスモードによっては保護を無視してデータが書き換えられてしまうこともあります。
AppSheetとスプレッドシートの保護を併用する場合は、AppSheet側の「Security」設定でカラム単位のアクセス制御(Editable_If条件)を別途設定するか、保護範囲をAppSheetがアクセスしないシートに分離するなどの設計が必要です。これを知らないと「保護しているはずなのにデータが変わっている」という謎の現象に延々と悩まされます。
ぶっちゃけこうした方がいい!
ここまで長々と書いてきましたが、情シスとして10年以上スプレッドシートのトラブルに向き合ってきた人間として、ぶっちゃけ言わせてもらいます。
保護の警告型は「お守り」程度に考えておくのが正解です。警告が出ても出なくても、Enterキーひとつで突破できる程度の防御力しかありません。「警告が出ない!」と騒ぐ前に、まず「そもそもこの保護は何を守りたいのか?」を明確にしてください。
本当に守りたいのであれば、最初から制限型(ユーザーを制限する)で保護をかけるべきです。「みんなに編集させたいけど、ちょっと注意してほしい」程度のものなら、保護ではなく条件付き書式でセルの色を変えるだけのほうが、実は効果的です。だって、赤い背景のセルを見たら「あ、ここは触らないほうがいいかも」と直感的に思いますよね。ダイアログの「OK」をポチッと押すより、よっぽど抑止力があります。
そして、大規模なシートを運用するなら、保護設定はGUIで手動でポチポチやるのではなく、GASで管理するのが絶対に正しいです。この記事で紹介した監査スクリプト、一括設定スクリプト、変更検知スクリプトの3つを導入するだけで、保護に関するトラブルの9割は未然に防げます。月1回の監査スクリプト実行と、日次の変更検知で十分です。
最後に、一番大事なことを言います。保護で「防ぐ」ことにこだわりすぎないでください。Googleスプレッドシートは変更履歴がすべて残っています。仮に誰かが大事なセルを書き換えてしまっても、変更履歴から元に戻せます。保護は「うっかりミスを減らす仕組み」であって、「セキュリティの砦」ではありません。本当にセキュリティが必要なデータは、そもそもスプレッドシートに置くべきではない、というのが長年の現場から出た私の結論です。保護機能はあくまで「使い勝手を良くするためのツール」として、柔軟に使いこなしてください。
このサイトをチップで応援
Googleスプレッドシートで保護範囲の警告だけが出ないときによくある質問
警告型の保護を設定したのに、自分だけ警告が表示されません。不具合でしょうか?
不具合ではありません。Googleスプレッドシートの仕様として、ファイルのオーナー(所有者)には保護の警告が表示されないようになっています。これは、オーナーがすべてのセルに対して常に完全な編集権限を持つためです。保護が正しく機能しているか確認したい場合は、編集権限を持つ別のGoogleアカウントでログインしてテストしてください。
「データ」メニューに「シートと範囲を保護」の項目が見当たりません。なぜですか?
最も多い原因は、開いているファイルがExcel形式(.xlsx、.xls)のままになっていることです。Googleドライブ上でExcelファイルを直接編集するモードでは、スプレッドシートの保護機能は使えません。「ファイル」→「Googleスプレッドシートとして保存」で変換すれば、保護メニューが表示されるようになります。また、閲覧権限しかない場合もこの項目は表示されませんので、自分の権限レベルも合わせて確認してください。
スマホアプリで保護範囲を編集しようとしても、何も警告が出ません。設定が消えたのでしょうか?
設定は消えていません。スマホ版のGoogleスプレッドシートアプリでは、保護の警告表示が正しく動作しないことがあります。2026年現在でも、モバイルアプリでは保護設定の新規作成・変更ができず、警告ダイアログの表示にも制限があります。保護の確認や設定変更はパソコンのブラウザから行ってください。
GASで保護を設定したのに警告が出ない場合、何を確認すべきですか?
GASで保護を設定した場合、
setWarningOnly(true)
を呼び忘れている可能性があります。GASのProtectionクラスは、デフォルトでは警告型ではなく制限型(
warningOnly: false
)になっています。
isWarningOnly()
メソッドで現在の設定を確認し、
true
になっていなければ
setWarningOnly(true)
を明示的に呼び出してください。また、GASでの操作はオーナー権限で実行されるため、自分自身には警告が表示されない点にも注意が必要です。
複数の保護設定が同じ範囲に重複していると、どうなりますか?
同じセル範囲に対して複数の保護が重なっている場合、それぞれの保護設定が独立して適用されます。たとえば、ひとつは「警告型」でもうひとつは「制限型(自分のみ編集可)」だった場合、制限型のほうが優先的に作用し、権限のないユーザーは編集できなくなります。この場合、警告は表示されずに完全ブロックされるため、「警告が出ない」と感じる原因になりえます。「データ」→「シートと範囲を保護」で保護の一覧を確認し、不要な重複設定を削除してください。
今すぐパソコンやスマホの悩みを解決したい!どうしたらいい?
いま、あなたを悩ませているITの問題を解決します!
「エラーメッセージ、フリーズ、接続不良...もうイライラしない!」
あなたはこんな経験はありませんか?
✅ ExcelやWordの使い方がわからない💦
✅ 仕事の締め切り直前にパソコンがフリーズ💦
✅ 家族との大切な写真が突然見られなくなった💦
✅ オンライン会議に参加できずに焦った💦
✅ スマホの重くて重要な連絡ができなかった💦
平均的な人は、こうしたパソコンやスマホ関連の問題で年間73時間(約9日分の働く時間!)を無駄にしています。あなたの大切な時間が今この悩んでいる瞬間も失われています。
LINEでメッセージを送れば即時解決!
すでに多くの方が私の公式LINEからお悩みを解決しています。
最新のAIを使った自動応答機能を活用していますので、24時間いつでも即返信いたします。
誰でも無料で使えますので、安心して使えます。
問題は先のばしにするほど深刻化します。
小さなエラーがデータ消失や重大なシステム障害につながることも。解決できずに大切な機会を逃すリスクは、あなたが思う以上に高いのです。
あなたが今困っていて、すぐにでも解決したいのであれば下のボタンをクリックして、LINEからあなたのお困りごとを送って下さい。
ぜひ、あなたの悩みを私に解決させてください。
まとめ
Googleスプレッドシートで保護範囲の警告だけが出ない原因は、実はそれほど複雑ではありません。最も多いのはオーナー自身がテストしているために警告が表示されないパターンで、次いでExcel形式のまま使っているケース、保護モードの選択ミス、ブラウザ環境の問題と続きます。
まずは「自分がオーナーではないか?」を確認し、別のアカウントでテストすること。次にファイル形式がGoogleスプレッドシートになっているかをチェック。そしてブラウザのシークレットモードで試して拡張機能の干渉を排除する。この3ステップで、大半の問題は解決できます。
チームの大事なデータを守るために、保護機能は設定して終わりではなく、正しく動作しているかを定期的に検証することが何より重要です。この記事で紹介した方法を参考に、安心して共同編集できるスプレッドシート環境を整えてください。





コメント