ADVERTISEMENT

【Googleスプレッドシート】Googleスプレッドシートで部署別の保護範囲を一括確認する手順

【Googleスプレッドシート】Googleスプレッドシートで部署別の保護範囲を一括確認する手順
🛡️ 超解決

Googleスプレッドシートで複数のシートや範囲に保護を設定していると、どの部署がどの範囲を編集できるのかを一覧で確認したくなる場面があります。標準の保護管理画面では1つずつ確認するしかなく、数十のシートがある場合は非常に手間がかかります。本記事では、Google Apps Scriptを活用して部署ごとの保護範囲を一括でリスト化する手順を解説します。また、手動での確認方法や失敗しやすいポイント、管理者に確認すべき情報もあわせて紹介します。

【要点】この記事で確認すること

  • 最初に見る場所: 保護設定は「データ」メニュー内の「保護されたシートと範囲」で確認できますが、一覧性は低いです。
  • 切り分けの軸: 手動で1つずつ確認する方法(標準機能)と、Google Apps Scriptで一括出力する方法があります。後者を推奨します。
  • 注意点: 会社PCでスクリプトを実行する際は、Google Workspaceの管理者によるスクリプト実行ポリシーを事前に確認してください。また、権限の承認が必要です。

ADVERTISEMENT

1. 標準機能で保護範囲を確認する方法とその限界

Googleスプレッドシートの標準機能を使用すると、各シートの保護設定を個別に確認できます。手順としては、メニューバーから「データ」→「保護されたシートと範囲」を選択し、右側のパネルに表示されるリストを確認します。ただし、この方法では一度に表示される情報は1つの保護範囲のみで、複数の保護を横断して一覧表示することはできません。また、保護対象のシート名、範囲、権限設定(編集を許可するユーザーやグループ)をまとめて表形式で出力する機能は用意されていません。そのため、シートが数十枚にわたる大規模なスプレッドシートでは、実用的な確認手段とは言えません。

2. Google Apps Scriptを使った一括確認の準備

2-1. スクリプトエディタを開く

まず、対象のスプレッドシートを開き、メニューから「拡張機能」→「Apps Script」を選択します。スクリプトエディタが新しいタブで開きます。このエディタに、保護範囲の情報を取得するためのコードを記述します。

2-2. 必要な権限の理解

スクリプトが保護情報を読み取るには、スプレッドシートの閲覧権限と保護設定へのアクセス権限が必要です。初回実行時に権限の承認画面が表示されるため、内容を確認して許可してください。会社PCで実行する場合、Google Workspaceの管理者が特定のスコープを制限している可能性があるため、事前に確認しておくことをおすすめします。

3. サンプルスクリプトと実行手順

以下に、現在のスプレッドシート内のすべての保護範囲を取得し、新しいシートに一覧として出力するスクリプトを用意しました。コードをコピーしてスクリプトエディタに貼り付け、実行してください。

  1. スクリプトエディタのコード.gsに以下のコードを貼り付けます。
  2. 関数名は「listProtectedRanges」とします。
  3. 上部のツールバーで関数を選択し、「▶実行」ボタンをクリックします。
  4. 初回は権限承認画面が表示されるので、自分のアカウントを選び、「許可」をクリックします。
  5. 実行が完了すると、スプレッドシートの末尾に「保護一覧」という新しいシートが作成され、保護範囲の情報が出力されます。

サンプルコード:

function listProtectedRanges() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  var output = [];
  output.push(["シート名", "保護タイプ", "範囲", "説明", "編集を許可されたユーザー"]);
  
  sheets.forEach(function(sheet) {
    var protections = sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE);
    protections.forEach(function(prot) {
      var editors = prot.getEditors();
      var editorNames = editors.map(function(user) { return user.getEmail(); }).join(", ");
      output.push([sheet.getName(), "範囲", prot.getRange().getA1Notation(), prot.getDescription(), editorNames]);
    });
    var sheetProtections = sheet.getProtections(SpreadsheetApp.ProtectionType.SHEET);
    sheetProtections.forEach(function(prot) {
      var editors = prot.getEditors();
      var editorNames = editors.map(function(user) { return user.getEmail(); }).join(", ");
      output.push([sheet.getName(), "シート", "(シート全体)", prot.getDescription(), editorNames]);
    });
  });
  
  var newSheet = ss.insertSheet("保護一覧");
  var range = newSheet.getRange(1, 1, output.length, output[0].length);
  range.setValues(output);
  range.sort(1);
}

このスクリプトは、各シートの範囲保護(セル範囲)とシート全体の保護の両方を取得し、許可された編集者のメールアドレスをカンマ区切りで表示します。説明文が設定されている場合はそれも出力します。

ADVERTISEMENT

4. 出力結果の解釈と部署別のフィルタリング

4-1. 出力シートの内容

実行後、新しいシート「保護一覧」が作成されます。列の構成は以下の通りです。

  • シート名: 保護が設定されているシートの名前
  • 保護タイプ: 「範囲」または「シート」
  • 範囲: 保護されているセル範囲(A1形式)、シート全体の場合は「(シート全体)」
  • 説明: 保護設定時に任意で入力した説明文
  • 編集を許可されたユーザー: 編集権限を持つユーザーのメールアドレス。複数いる場合はカンマ区切り

4-2. 部署別に抽出するカスタマイズ

出力された「編集を許可されたユーザー」列を使って、特定の部署に関連する保護範囲を抽出できます。例えば、部署ごとにグループメール(例: sales@example.com)が設定されている場合、そのグループを含む行だけをフィルタリングします。スプレッドシートのフィルタ機能を使うか、以下のようにスクリプトを修正して特定のユーザーだけを抽出するようにすることも可能です。

function listProtectedRangesByDepartment(targetEmail) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  var output = [];
  output.push(["シート名", "保護タイプ", "範囲", "説明"]);
  
  sheets.forEach(function(sheet) {
    var protections = sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE);
    protections.forEach(function(prot) {
      var editors = prot.getEditors().map(function(u) { return u.getEmail(); });
      if (editors.indexOf(targetEmail) !== -1) {
        output.push([sheet.getName(), "範囲", prot.getRange().getA1Notation(), prot.getDescription()]);
      }
    });
    var sheetProtections = sheet.getProtections(SpreadsheetApp.ProtectionType.SHEET);
    sheetProtections.forEach(function(prot) {
      var editors = prot.getEditors().map(function(u) { return u.getEmail(); });
      if (editors.indexOf(targetEmail) !== -1) {
        output.push([sheet.getName(), "シート", "(シート全体)", prot.getDescription()]);
      }
    });
  });
  
  var newSheet = ss.insertSheet("保護一覧_" + targetEmail.replace(/[@.]/g, "_"));
  var range = newSheet.getRange(1, 1, output.length, output[0].length);
  range.setValues(output);
}

この関数を実行する際は、引数に部署のグループメールアドレスを指定します。例えば「listProtectedRangesByDepartment(‘sales@example.com’)」のように実行します。これにより、その部署だけが編集できる保護範囲のみを一覧化できます。

5. 手動確認とスクリプト確認の比較

比較項目 手動確認(標準機能) スクリプト確認
確認速度 シート数に比例して時間がかかる 一瞬で一覧化できる
一覧性 低い(1つずつ表示) 高い(表形式で出力)
権限の詳細 ユーザー名は表示されるがコピーしにくい メールアドレスが一覧で取得できる
フィルタリング 不可能 スクリプトまたはフィルタで可能
実行環境 ブラウザのみ スクリプトエディタと権限承認が必要

6. 失敗パターンと注意点

6-1. スクリプトがエラーになる場合

スクリプト実行時に「Exception: 保護設定を読み取る権限がありません」というエラーが発生することがあります。これは、スクリプトの権限スコープに保護設定へのアクセスが含まれていないか、承認されていないことが原因です。再度権限承認をやり直すか、スクリプトエディタの「プロジェクトの設定」からスコープを確認してください。また、Google Workspaceの管理者が保護設定の読み取りを禁止している場合は、その制限を解除してもらう必要があります。

6-2. 保護範囲が空の場合の出力

保護が一切設定されていないスプレッドシートでスクリプトを実行すると、新しいシートにはヘッダー行のみが出力され、データは0行になります。異常ではありませんが、期待した結果が得られない場合は保護設定そのものが存在しない可能性があります。標準機能で一度確認してください。

6-3. 大量の保護がある場合のパフォーマンス

保護範囲が数千に及ぶ場合、スクリプトの実行に時間がかかることがあります。その場合は、スクリプトを分割してシートごとに実行するなどの工夫が必要です。また、Google Apps Scriptの実行時間制限(6分)に引っかかる可能性もあるため、一度に大量の処理を行う場合は注意してください。

7. 管理者へ確認する情報

会社のGoogle Workspace環境でスクリプトを利用する場合、以下の点を管理者に確認しておくとスムーズです。

  • Apps Scriptの実行が許可されているか(一部の組織では制限されています)。
  • 保護設定へのアクセスを含むスコープ(https://www.googleapis.com/auth/spreadsheets)が許可されているか。
  • グループメールを使用している場合、そのグループが保護設定の編集者として正しく機能しているか(グループのメンバーシップの確認)。

8. よくある質問

Q1. スクリプトを実行しても新しいシートが作成されません。

A. スクリプトの実行ログを確認してください。エラーが発生していないか、または既に同名のシートが存在する場合は上書きされずにエラーになります。シート名を変更するか、既存のシートを削除してから再実行してください。

Q2. 部署のグループメールが複数ある場合、どうやって抽出すれば良いですか?

A. 上記のカスタムスクリプトでtargetEmailを配列にしてループするか、出力後にスプレッドシートのフィルタ機能で複数条件を設定してください。例えば、フィルタで「テキストを含む」条件を複数設定できますが、Googleスプレッドシートの標準フィルタではOR条件の設定が手間です。その場合は、スクリプト内で複数のメールをチェックするロジックを追加することをおすすめします。

Q3. 保護範囲の変更履歴も確認できますか?

A. 標準機能では保護設定の変更履歴は直接確認できませんが、Google Workspaceの管理コンソールの監査ログで確認できる場合があります。ただし、スプレッドシート内のスクリプトだけでは過去の変更を取得することはできません。

まとめ

Googleスプレッドシートで部署別の保護範囲を一括確認するには、標準機能ではなくGoogle Apps Scriptを利用する方法が現実的です。本記事で紹介したスクリプトを使えば、すべての保護設定を表形式で出力し、部署ごとにフィルタリングすることが可能です。初回のセットアップに少し手間がかかりますが、一度構築すればシートの追加・変更時にも再実行するだけで最新の状態を把握できます。会社のポリシーに従い、適切に権限を管理した上で活用してください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。

ADVERTISEMENT