【GAS】スプレッドシートの保護機能まとめ【サンプルソース付】

快速ワーク
スポンサーリンク

GAS開発者向けにスプレッドシートの保護機能をすべてまとめました。

GoogleスプレッドシートはWeb上のツールなので、セキュリティ面では気を付けたいところですね。

外部に公開したい場合など、保護をかける場面もきっとあります。

保護に関するメソッドをすべて載せてます。少しでも参考になれば幸いです。


  1. Google Apps Script スプレッドシート 基礎 リファレンス
  2. セル範囲クラス[Range]の保護
    1. セル範囲保護[protect()]
  3. シートクラス[Sheet]の保護
    1. シート保護[protect()]
    2. シート保護範囲取得[getProtections(保護タイプ)]
  4. スプレッドシートクラス[Spreadsheet]の保護
    1. シート保護範囲取得[getProtections(保護タイプ)]
  5. 保護クラス[Protection]
    1. 保護範囲シートエディタリスト指定ユーザ追加1[addEditor(メールアドレス)]
    2. 保護範囲シートエディタリスト指定ユーザ追加2[addEditor(ユーザ)]
    3. 保護範囲シートエディタリスト指定ユーザ複数追加[addEditors(メールアドレス's)]
    4. ユーザ保護編集権限確認[canDomainEdit()]
    5. ユーザ保護編集可能[canEdit()]
    6. 保護範囲シート説明取得[getDescription()]
    7. 保護範囲シートエディタリスト取得[getEditors()]
    8. 保護領域タイプ取得[getProtectionType()]
    9. 保護範囲取得[getRange()]
    10. 保護されていない範囲取得[getUnprotectedRanges()]
    11. 警告保護使用確認[isWarningOnly()]
    12. 保護範囲シート削除[remove()]
    13. 保護範囲シートエディタリスト指定ユーザ削除1[removeEditor(メールアドレス)]
    14. 保護範囲シートエディタリスト指定ユーザ削除2[removeEditor(ユーザ)]
    15. 保護範囲シートエディタリスト特定ユーザー複数削除[removeEditors(メールアドレス)]
    16. 保護範囲シート説明設定[setDescription(説明)]
    17. ユーザ保護編集権限設定[setDomainEdit(編集可否)]
    18. 名前付き範囲の保護範囲設定[setNamedRange(名前付き範囲)]
    19. 保護範囲設定[setRange(セル範囲)]
    20. 名前付き範囲保護の関連付け[setRangeName(名前付き範囲名)]
    21. 指定範囲の保護解除[setUnprotectedRanges(範囲's)]
    22. 警告保護設定[setWarningOnly(警告設定有無)]
  6. 保護タイプ列挙型[ProtectionType]
  7. 最後に

Google Apps Script スプレッドシート 基礎 リファレンス

当ページは、GAS公式リファレンスを元にスプレッドシートの機能毎にまとめた基礎的な内容となっております。

若干、文言がおかしい可能性がありますが、あらかじめご了承ください。

 

GAS基本メソッドまとめ一覧はコチラ↓↓↓です。スプレッドシートの基本的な機能をまとめてますので、ぜひご活用ください。

【GAS】スプレッドシート基本メソッドまとめ一覧【初心者入門】
GAS開発者向けにスプレッドシートの基本的なメソッドを一覧にまとめました。各機能ごとのクラス、メソッドごとのサンプルソース付ページへリンクする一覧です。初心者にとって、スプレッドシートの基本的な操作・機能単位のメソッドを知...

 

まずは実際に動かしてみることをオススメします。マクロの登録方法は以下を参照いただければと思います。

【GAS】Googleスプレッドシートでマクロの使い方入門【動画付】
Googleの「Google Apps Script」通称GAS。GoogleマップやGメールなど、いろんなGoogle関連のサービスと自由に連携できたり、独自のWebアプリを開発することもできる、いろんな可能性を秘めたワクワクの...

 

GASの本はまだまだ少ないですね。基礎レベルであれば、以下の参考書が初心者にはベストの本です。

基本的な仕様やよく使われる機能の設定方法がまとまっています。

※JavaScriptの知識が既にある程度ある人にとっては冗長かもしれません。


セル範囲クラス[Range]の保護

セル範囲の保護メソッドです。

セル範囲保護[protect()]

protect()
権限を持つユーザー以外は編集範囲から範囲を保護できるオブジェクトを作成します。スクリプトが実際に範囲のエディタのリストを変更するまで(Protection.removeEditor(emailAddress)、Protection.removeEditor(user)、Protection.removeEditors(emailAddresses)、Protection.addEditor(emailAddress)、Protection.addEditor(user)、 Protection.addEditors(emailAddresses)、またはProtection.setDomainEdit(編集可能)に新しい値を設定すると、権限はスプレッドシート自体の権限を反映するため、事実上、範囲は保護されないままになります。範囲がすでに保護されている場合、このメソッドは既存の範囲と重なる新しい保護範囲を作成します。セルが複数の保護された範囲によって保護されていて、そのいずれかが特定のユーザーによるセルの編集を妨げる場合、そのユーザーはそのセルを編集することを許可されません。

function protectSample() {
  // 範囲A1:B10を保護してから、他のすべてのユーザーをエディターのリストから削除します。
  var ss = SpreadsheetApp.getActive();
  var range = ss.getRange('A1:B10');
  var protection = range.protect().setDescription('Sample protected range');

  // 他のユーザーを削除する前に、現在のユーザーが編集者であることを確認してください。
  // それ以外の場合、ユーザーの編集権限がグループからのものである場合、
  // スクリプトはそのグループを削除したときに例外をスローします。
  var me = Session.getEffectiveUser();
  protection.addEditor(me);
  protection.removeEditors(protection.getEditors());
  if (protection.canDomainEdit()) {
    protection.setDomainEdit(false);
  }
}

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

参照:Google Apps Script | REFERENCE | SpreadSheet | Class Range | Methods | protect()




シートクラス[Sheet]の保護

シートの保護メソッドです。

シート保護[protect()]

protect()
権限を持つユーザー以外はシートを編集できないように保護できるオブジェクトを作成します。スクリプトが実際にシートのエディタのリストを変更するまで(Protection.removeEditor(emailAddress)、Protection.removeEditor(user)、Protection.removeEditors(emailAddresses)、Protection.addEditor(emailAddress)、Protection.addEditor(user)、 Protection.addEditors(emailAddresses)、またはProtection.setDomainEdit(編集可能)に新しい値を設定すると、パーミッションはスプレッドシート自体のパーミッションを反映します。つまり、シートは無保護のままになります。シートがすでに保護されている場合、このメソッドは既存の保護設定を表すオブジェクトを返します。保護シートには、保護されていない領域が含まれる場合があります。

function protectSample() {
  // アクティブシートを保護してから、他のすべてのユーザをエディタのリストから削除します。
  var sheet = SpreadsheetApp.getActiveSheet();
  var protection = sheet.protect().setDescription('Sample protected sheet');

  // 他のユーザーを削除する前に、現在のユーザーが編集者であることを確認してください。
  // それ以外の場合、ユーザーの編集権限がグループからのものである場合、
  // スクリプトはそのグループを削除したときに例外をスローします。
  var me = Session.getEffectiveUser();
  protection.addEditor(me);
  protection.removeEditors(protection.getEditors());
  if (protection.canDomainEdit()) {
    protection.setDomainEdit(false);
  }
}

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

参照:Google Apps Script | REFERENCE | SpreadSheet | Class Sheet | Methods | protect()

シート保護範囲取得[getProtections(保護タイプ)]

getProtections(type)
シート内のすべての保護された範囲を表すオブジェクトの配列、またはシート自体の保護を表す単一要素の配列を取得します。

function getProtections1Sample() {
  // ユーザーが編集権限を持つスプレッドシート内のすべての範囲保護を削除します。
  var sheet = SpreadsheetApp.getActiveSheet();
  var protections = sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE);
  for (var i = 0; i < protections.length; i++) {
    var protection = protections[i];
    if (protection.canEdit()) {
      protection.remove();
    }
  }
}
function getProtections2Sample() {
  // ユーザーに編集権限がある場合は、アクティブシートからシート保護を削除します。
  var sheet = SpreadsheetApp.getActiveSheet();
  var protection = sheet.getProtections(SpreadsheetApp.ProtectionType.SHEET)[0];
  if (protection && protection.canEdit()) {
    protection.remove();
  }
}
Parameters
名前タイプ説明
typeProtectionType保護領域のタイプ。SpreadsheetApp.ProtectionType.RANGEまたはSpreadsheetApp.ProtectionType.SHEETのいずれかです。

Return
Protection[] - シート内のすべての保護範囲を表すオブジェクトの配列、またはシート自体の保護を表す単一要素の配列。

参照:Google Apps Script | REFERENCE | SpreadSheet | Class Sheet | Methods | getProtections(type)


スプレッドシートクラス[Spreadsheet]の保護

スプレッドシートの保護メソッドです。

シート保護範囲取得[getProtections(保護タイプ)]

getProtections(type)
スプレッドシート内のすべての保護された範囲またはシートを表すオブジェクトの配列を取得します。

function getProtections1Sample() {
  // ユーザーが編集権限を持つスプレッドシート内のすべての範囲保護を削除します。
  var ss = SpreadsheetApp.getActive();
  var protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);
  for (var i = 0; i < protections.length; i++) {
    var protection = protections[i];
    if (protection.canEdit()) {
      protection.remove();
    }
  }
}
function getProtections2Sample() {
  // ユーザーに編集権限があるスプレッドシート内のすべてのシート保護を削除します。
  var ss = SpreadsheetApp.getActive();
  var protections = ss.getProtections(SpreadsheetApp.ProtectionType.SHEET);
  for (var i = 0; i < protections.length; i++) {
    var protection = protections[i];
    if (protection.canEdit()) {
      protection.remove();
    }
  }
}
Parameters
名前タイプ説明
typeProtectionType保護領域のタイプ。SpreadsheetApp.ProtectionType.RANGEまたはSpreadsheetApp.ProtectionType.SHEETのいずれかです。

Return
Protection[] - スプレッドシート内のすべての保護された範囲またはシートを表すオブジェクトの配列。

参照:Google Apps Script | REFERENCE | SpreadSheet | Class Spreadsheet | Methods | getProtections(type)




保護クラス[Protection]

保護クラスメソッドです。

保護された範囲とシートにアクセスして変更します。保護範囲は、セルの静的範囲または名前付き範囲のいずれかを保護できます。保護シートには、保護されていない領域が含まれる場合があります。古いバージョンのGoogleスプレッドシートで作成したスプレッドシートの場合は、代わりにPageProtectionクラスを使用してください。

参照:Google Apps Script | REFERENCE | SpreadSheet | Class Protection

function protection1Sample() {
  // 範囲A1:B10を保護してから、他のすべてのユーザーをエディターのリストから削除します。
  var ss = SpreadsheetApp.getActive();
  var range = ss.getRange('A1:B10');
  var protection = range.protect().setDescription('Sample protected range');

  // 他のユーザーを削除する前に、現在のユーザーが編集者であることを確認してください。
  // それ以外の場合、ユーザーの編集権限がグループからのものである場合、
  // スクリプトはそのグループを削除したときに例外をスローします。
  var me = Session.getEffectiveUser();
  protection.addEditor(me);
  protection.removeEditors(protection.getEditors());
  if (protection.canDomainEdit()) {
    protection.setDomainEdit(false);
  }
}
function protection2Sample() {
  // ユーザーが編集権限を持つスプレッドシート内のすべての範囲保護を削除します。
  var ss = SpreadsheetApp.getActive();
  var protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);
  for (var i = 0; i < protections.length; i++) {
    var protection = protections[i];
    if (protection.canEdit()) {
      protection.remove();
    }
  }
}
function protection3Sample() {
  // アクティブシートを保護してから、他のすべてのユーザをエディタのリストから削除します。
  var sheet = SpreadsheetApp.getActiveSheet();
  var protection = sheet.protect().setDescription('Sample protected sheet');

  // 他のユーザーを削除する前に、現在のユーザーが編集者であることを確認してください。
  // それ以外の場合、ユーザーの編集権限がグループからのものである場合、
  // スクリプトはそのグループを削除したときに例外をスローします。
  var me = Session.getEffectiveUser();
  protection.addEditor(me);
  protection.removeEditors(protection.getEditors());
  if (protection.canDomainEdit()) {
    protection.setDomainEdit(false);
  }
}
Methods
方法タイプ説明
addEditor(emailAddress)Protection保護されたシートまたは範囲のエディタのリストに指定のユーザーを追加します。
addEditor(user)Protection保護されたシートまたは範囲のエディタのリストに指定のユーザーを追加します。
addEditors(emailAddresses)Protection保護されたシートまたは範囲のエディタのリストに、指定されたユーザーの配列を追加します。
canDomainEdit()Booleanスプレッドシートを所有するドメイン内のすべてのユーザーが保護範囲またはシートを編集する権限を持っているかどうかを判断します。
canEdit()Booleanユーザーが保護範囲またはシートを編集する権限を持っているかどうかを決定します。
getDescription()String保護された範囲またはシートの説明を取得します。
getEditors()User[]保護された範囲またはシートのエディタのリストを取得します。
getProtectionType()ProtectionType保護領域の種類(RANGEまたはSHEET)を取得します。
getRange()Range保護されている範囲を取得します。
getRangeName()String名前付き範囲に関連付けられている場合は、保護範囲の名前を取得します。
getUnprotectedRanges()Range[]保護されたシート内の保護されていない範囲の配列を取得します。
isWarningOnly()Boolean保護領域が「警告ベース」の保護を使用しているかどうかを確認します。
remove()void範囲またはシートの保護を解除します。
removeEditor(emailAddress)Protection保護されたシートまたは範囲のエディタのリストから特定のユーザーを削除します。
removeEditor(user)Protection保護されたシートまたは範囲のエディタのリストから特定のユーザーを削除します。
removeEditors(emailAddresses)Protection保護されたシートまたは範囲のエディタのリストから、指定されたユーザーの配列を削除します。
setDescription(description)Protection保護範囲またはシートの説明を設定します。
setDomainEdit(editable)Protectionスプレッドシートを所有するドメイン内のすべてのユーザーが保護範囲またはシートを編集する権限を持っているかどうかを設定します。
setNamedRange(namedRange)Protection保護されている範囲を既存の名前付き範囲と関連付けます。
setRange(range)Protection保護されている範囲を調整します。
setRangeName(rangeName)Protection保護されている範囲を既存の名前付き範囲と関連付けます。
setUnprotectedRanges(ranges)Protection保護シート内の指定された範囲の配列の保護を解除します。
setWarningOnly(warningOnly)Protectionこの保護範囲が「警告ベース」の保護を使用しているかどうかを設定します。

保護範囲シートエディタリスト指定ユーザ追加1[addEditor(メールアドレス)]

addEditor(emailAddress)
保護されたシートまたは範囲のエディタのリストに指定のユーザーを追加します。この方法では、スプレッドシート自体を編集する権限がユーザーに自動的に付与されることはありません。それに加えて、Spreadsheet.addEditor(emailAddress)を呼び出します。

Parameters
名前タイプ説明
emailAddressString追加するユーザーのEメールアドレス。

Return
Protection - 連鎖用の保護設定を表すオブジェクト。

保護範囲シートエディタリスト指定ユーザ追加2[addEditor(ユーザ)]

addEditor(user)
保護されたシートまたは範囲のエディタのリストに指定のユーザーを追加します。この方法では、スプレッドシート自体を編集する権限がユーザーに自動的に付与されることはありません。それに加えて、Spreadsheet.addEditor(user)を呼び出します。

Parameters
名前タイプ説明
userUser追加するユーザーの表現。

Return
Protection - 連鎖用の保護設定を表すオブジェクト。

保護範囲シートエディタリスト指定ユーザ複数追加[addEditors(メールアドレス's)]

addEditors(emailAddresses)
保護されたシートまたは範囲のエディタのリストに、指定されたユーザーの配列を追加します。この方法では、スプレッドシート自体を編集する権限がユーザーに自動的に付与されることはありません。それに加えて、Spreadsheet.addEditors(emailAddresses)を呼び出します。

Parameters
名前タイプ説明
emailAddressesString[]追加するユーザーのEメールアドレスの配列。

Return
Protection - 連鎖用の保護設定を表すオブジェクト。

ユーザ保護編集権限確認[canDomainEdit()]

canDomainEdit()
スプレッドシートを所有するドメイン内のすべてのユーザーが保護範囲またはシートを編集する権限を持っているかどうかを判断します。ユーザーが保護範囲またはシートを編集する権限を持っていない場合は、例外をスローします。

Return
Boolean - スプレッドシートを所有するドメイン内のすべてのユーザーが保護範囲またはシートを編集する権限を持っている場合はtrue、それ以外の場合はfalse。そうでない場合はfalse。

ユーザ保護編集可能[canEdit()]

canEdit()
ユーザーが保護範囲またはシートを編集する権限を持っているかどうかを決定します。スプレッドシートの所有者は、常に保護範囲とシートを編集できます。

function canEditSample() {
  // ユーザーが編集権限を持つスプレッドシート内のすべての範囲保護を削除します。
  var ss = SpreadsheetApp.getActive();
  var protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);
  for (var i = 0; i < protections.length; i++) {
    var protection = protections[i];
    if (protection.canEdit()) {
      protection.remove();
    }
  }
}

Return
Boolean - ユーザーが保護範囲またはシートを編集する権限を持っている場合はtrueです。そうでない場合はfalse。

保護範囲シート説明取得[getDescription()]

getDescription()
保護された範囲またはシートの説明を取得します。説明が設定されていない場合、このメソッドは空の文字列を返します。

Return
String - 保護された範囲またはシートの説明、または説明が設定されていない場合は空の文字列。

保護範囲シートエディタリスト取得[getEditors()]

getEditors()
保護された範囲またはシートのエディタのリストを取得します。ユーザーが保護範囲またはシートを編集する権限を持っていない場合は、例外をスローします。

function getEditorsSample() {
  // アクティブシートを保護してから、他のすべてのユーザをエディタのリストから削除します。
  var sheet = SpreadsheetApp.getActiveSheet();
  var protection = sheet.protect().setDescription('Sample protected sheet');

  // 他のユーザーを削除する前に、現在のユーザーが編集者であることを確認してください。
  // それ以外の場合、ユーザーの編集権限がグループからのものである場合、
  // スクリプトはそのグループを削除したときに例外をスローします。
  var me = Session.getEffectiveUser();
  protection.addEditor(me);
  protection.removeEditors(protection.getEditors());
  if (protection.canDomainEdit()) {
    protection.setDomainEdit(false);
  }
}

Return
User[] - 保護範囲またはシートを編集する権限を持つユーザーの配列。

保護領域タイプ取得[getProtectionType()]

getProtectionType()
保護領域の種類(RANGEまたはSHEET)を取得します。

Return
ProtectionType - 保護領域のタイプ、RANGEまたはSHEET。

保護範囲取得[getRange()]

getRange()
保護されている範囲を取得します。保護が範囲ではなくシートに適用される場合、このメソッドはシート全体にわたる範囲を返します。

Return
保護されている範囲。

保護されていない範囲取得[getUnprotectedRanges()]

getUnprotectedRanges()
保護されたシート内の保護されていない範囲の配列を取得します。 Protectionオブジェクトが保護シートではなく保護範囲に対応する場合、このメソッドは空の配列を返します。保護されていない範囲を変更するには、setUnprotectedRanges(範囲)を使用して範囲の新しい配列を設定します。シート全体を再保護するには、空の配列を設定してください。

function getUnprotectedRangesSample() {
  // 保護されたシート内の他の保護されていない範囲に加えて、保護されていないセルE2:F5。
  var sheet = SpreadsheetApp.getActiveSheet();
  var protection = sheet.protect();
  var unprotected = protection.getUnprotectedRanges();
  unprotected.push(sheet.getRange('E2:F5'));
  protection.setUnprotectedRanges(unprotected);
}

Return
Range[] - 保護されたシート内の保護されていない範囲の配列。

警告保護使用確認[isWarningOnly()]

isWarningOnly()
保護領域が「警告ベース」の保護を使用しているかどうかを確認します。警告ベースの保護とは、編集を除いてすべてのユーザーが領域内のデータを編集できることを意味し、編集を確認するようにユーザーに求めます。デフォルトでは、保護範囲またはシートは警告ベースではありません。警告状態に変更するには、setWarningOnly(warningOnly)を使用してください。

Return
Boolean - 保護された範囲またはシートが警告ベースの保護のみを使用している場合はtrueです。

保護範囲シート削除[remove()]

remove()
範囲またはシートの保護を解除します。

function remove1Sample() {
  // ユーザーが編集権限を持つスプレッドシート内のすべての範囲保護を削除します。
  var ss = SpreadsheetApp.getActive();
  var protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);
  for (var i = 0; i < protections.length; i++) {
    var protection = protections[i];
    if (protection.canEdit()) {
      protection.remove();
    }
  }
}
function remove2Sample() {
  // ユーザーに編集権限がある場合は、アクティブシートからシート保護を削除します。
  var sheet = SpreadsheetApp.getActiveSheet();
  var protection = sheet.getProtections(SpreadsheetApp.ProtectionType.SHEET)[0];
  if (protection && protection.canEdit()) {
    protection.remove();
  }
}

保護範囲シートエディタリスト指定ユーザ削除1[removeEditor(メールアドレス)]

removeEditor(emailAddress)
保護されたシートまたは範囲のエディタのリストから特定のユーザーを削除します。ユーザーが編集権限を持つGoogleグループのメンバーである場合、またはドメイン内のすべてのユーザーが編集権限を持つ場合でも、ユーザーは保護された領域を編集できます。スプレッドシートの所有者も現在のユーザーも削除できません。

Parameters
名前タイプ説明
emailAddressString削除するユーザーのEメールアドレス。

Return
Protection - 連鎖用の保護設定を表すオブジェクト。

保護範囲シートエディタリスト指定ユーザ削除2[removeEditor(ユーザ)]

removeEditor(user)
保護されたシートまたは範囲のエディタのリストから特定のユーザーを削除します。ユーザーが編集権限を持つGoogleグループのメンバーである場合、またはドメイン内のすべてのユーザーが編集権限を持つ場合でも、ユーザーは保護された領域を編集できます。スプレッドシートの所有者も現在のユーザーも削除できません。

Parameters
名前タイプ説明
userUser削除するユーザーの表現。

Return
Protection - 連鎖用の保護設定を表すオブジェクト。

保護範囲シートエディタリスト特定ユーザー複数削除[removeEditors(メールアドレス)]

removeEditors(emailAddresses)
保護されたシートまたは範囲のエディタのリストから、指定されたユーザーの配列を削除します。いずれかのユーザーが編集権限を持つGoogleグループのメンバーである場合、またはドメイン内のすべてのユーザーが編集権限を持つ場合でも、それらのユーザーは保護領域を編集できます。スプレッドシートの所有者も現在のユーザーも削除できません。

function removeEditorsSample() {
  // アクティブシートを保護してから、他のすべてのユーザをエディタのリストから削除します。
  var sheet = SpreadsheetApp.getActiveSheet();
  var protection = sheet.protect().setDescription('Sample protected sheet');

  // 他のユーザーを削除する前に、現在のユーザーが編集者であることを確認してください。
  // それ以外の場合、ユーザーの編集権限がグループからのものである場合、
  // スクリプトはそのグループを削除したときに例外をスローします。
  var me = Session.getEffectiveUser();
  protection.addEditor(me);
  protection.removeEditors(protection.getEditors());
  if (protection.canDomainEdit()) {
    protection.setDomainEdit(false);
  }
}
Parameters
名前タイプ説明
emailAddressesString[]削除するユーザーの電子メールアドレスの配列。

Return
Protection - 連鎖用の保護設定を表すオブジェクト。

保護範囲シート説明設定[setDescription(説明)]

setDescription(description)
保護範囲またはシートの説明を設定します。

Parameters
名前タイプ説明
descriptionString保護された範囲またはシートの説明。

Return
Protection - 連鎖用の保護設定を表すオブジェクト。

ユーザ保護編集権限設定[setDomainEdit(編集可否)]

setDomainEdit(editable)
スプレッドシートを所有するドメイン内のすべてのユーザーが保護範囲またはシートを編集する権限を持っているかどうかを設定します。明示的な編集権限を持つユーザーは、この設定に関係なく保護領域を編集できます。スプレッドシートがG Suiteドメインに属していない場合(つまり、gmail.comアカウントによって所有されている場合)、例外をスローします。

Parameters
名前タイプ説明
editableBooleanスプレッドシートを所有するドメイン内のすべてのユーザーが保護範囲またはシートを編集する権限を持つ必要がある場合、trueです。そうでない場合はfalse。

Return
Protection - 連鎖用の保護設定を表すオブジェクト。

名前付き範囲の保護範囲設定[setNamedRange(名前付き範囲)]

setNamedRange(namedRange)
保護されている範囲を既存の名前付き範囲と関連付けます。名前付き範囲が現在の保護範囲とは異なる領域をカバーする場合、このメソッドは代わりに名前付き範囲をカバーするように保護を移動します。名前付き範囲は、現在の保護範囲と同じシート上になければなりません。スクリプトはこのメソッドを明示的に呼び出して、保護範囲を名前付き範囲に関連付ける必要があります。 setRangeName(rangeName)を呼び出さずにRange.protect()を呼び出して、名前付き範囲であるRangeから保護を作成するだけでは、それらを関連付けるには不十分です。ただし、Google Sheets UIで名前付き範囲から保護範囲を作成すると、それらは自動的に関連付けられます。

Parameters
名前タイプ説明
namedRangeNamedRange保護範囲に関連付ける既存の名前付き範囲。

Return
Protection - 連鎖用の保護設定を表すオブジェクト。

保護範囲設定[setRange(セル範囲)]

setRange(range)
保護されている範囲を調整します。指定された範囲が現在の保護されている範囲と異なる領域をカバーしている場合、このメソッドは代わりに新しい範囲をカバーするように保護を移動します。

Parameters
名前タイプ説明
rangeRange編集から保護するための新しい範囲。

Return
Protection - 連鎖用の保護設定を表すオブジェクト。

名前付き範囲保護の関連付け[setRangeName(名前付き範囲名)]

setRangeName(rangeName)
保護されている範囲を既存の名前付き範囲と関連付けます。名前付き範囲が現在の保護範囲とは異なる領域をカバーする場合、このメソッドは代わりに名前付き範囲をカバーするように保護を移動します。名前付き範囲は、現在の保護範囲と同じシート上になければなりません。スクリプトはこのメソッドを明示的に呼び出して、保護範囲を名前付き範囲に関連付ける必要があります。 setRangeName(rangeName)を呼び出さずにRange.protect()を呼び出して、名前付き範囲であるRangeから保護を作成するだけでは、それらを関連付けるには不十分です。ただし、Google Sheets UIで名前付き範囲から保護範囲を作成すると、それらは自動的に関連付けられます。

function setRangeNameSample() {
  // スプレッドシート内の名前付き範囲を保護し、保護された範囲の名前を記録します。
  var ss = SpreadsheetApp.getActive();
  var range = ss.getRange('A1:B10');
  var protection = range.protect();
  ss.setNamedRange('Test', range);       // 名前付き範囲を作成します。
  protection.setRangeName('Test');       // 保護を名前付き範囲に関連付けます。
  Logger.log(protection.getRangeName()); // 保護範囲の名前を確認します。
}
Parameters
名前タイプ説明
rangeNameString保護する名前付き範囲の名前。

Return
Protection - 連鎖用の保護設定を表すオブジェクト。

指定範囲の保護解除[setUnprotectedRanges(範囲's)]

setUnprotectedRanges(ranges)
保護シート内の指定された範囲の配列の保護を解除します。 Protectionオブジェクトが保護シートではなく保護範囲に対応する場合、またはいずれかの範囲が保護シートにない場合は、例外をスローします。保護されていない範囲を変更するには、範囲の新しい配列を設定します。シート全体を再保護するには、空の配列を設定してください。

function setUnprotectedRangesSample() {
  // B2:C5以外のアクティブシートを保護してから、他のすべてのユーザーをエディターのリストから削除します。
  var sheet = SpreadsheetApp.getActiveSheet();
  var protection = sheet.protect().setDescription('Sample protected sheet');
  var unprotected = sheet.getRange('B2:C5');
  protection.setUnprotectedRanges([unprotected]);

  // 他のユーザーを削除する前に、現在のユーザーが編集者であることを確認してください。
  // それ以外の場合、ユーザーの編集権限がグループからのものである場合、
  // スクリプトはそのグループを削除したときに例外をスローします。
  var me = Session.getEffectiveUser();
  protection.addEditor(me);
  protection.removeEditors(protection.getEditors());
  if (protection.canDomainEdit()) {
    protection.setDomainEdit(false);
  }
}
Parameters
名前タイプ説明
rangesRange[]保護されたシート内で保護されていない範囲の配列。

Return
Protection - 連鎖用の保護設定を表すオブジェクト。

警告保護設定[setWarningOnly(警告設定有無)]

setWarningOnly(warningOnly)
この保護範囲が「警告ベース」の保護を使用しているかどうかを設定します。警告ベースの保護とは、編集を除いてすべてのユーザーが領域内のデータを編集できることを意味し、編集を確認するようにユーザーに求めます。デフォルトでは、保護範囲またはシートは警告ベースではありません。警告状態を確認するには、isWarningOnly()を使用してください。

Parameters
名前タイプ説明
warningOnlyBoolean

Return
Protection - 連鎖用の保護設定を表すオブジェクト。


保護タイプ列挙型[ProtectionType]

保護タイプの列挙型です。

Enum ProtectionType
編集から保護することができるスプレッドシートの部分を表す列挙体。

Properties
プロパティタイプ説明
RANGEEnum範囲に対する保護。
SHEETEnumシートの保護

参照:Google Apps Script | REFERENCE | SpreadSheet | Enum ProtectionType


最後に

GAS保護機能のまとめをご紹介させていただきました。

必要に応じて、有益な情報でさらに更新していきたいと思います。

プログラミングスキルを向上させるためには、本を読むだけでは脳にインプットされませんね。

実際に手を動かしてアウトプットしまくるのが一番の近道だと思います。

実際にサンプルソースをコピーして実行した結果がどうなるかを体験してみてください。

自分なりのアレンジを加えたり、なぜエラーになるのかを考え、何度も試行錯誤して問題を解決しまくり、着実に理解しながらスキルを向上させていきましょう。

GASはExcelVBAとはかなり違いますが、ベースとなっているJavaScriptは覚えて損はないプログラミング言語なのでショートカットキーなどと組み合わせてぜひ活用してみてください。

Googleスプレッドシート全ショートカットキー一覧はこちら↓↓↓

Googleスプレッドシートの使い方や機能がわかるショートカットキー全まとめ一覧【初心者こそ必見】
表計算ソフトとして、まだまだExcelのシェア率は高いですが、GoogleスプレッドシートにはExcelにはない超強力な関数があったり、Excelとは違って常に最新版を無料で使用できます。なにより、インターネットを使ったオンライン...

ショートカットキー一覧にもGASメソッドを載せています。どの操作からどのメソッドが呼ばれるのかイメージしてください。




コメント