非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【GAS】スプレッドシートの範囲の保護をGASで自作してみた

   

GoogleスプレッドシートではExcel同様セルの編集をさせないための保護機能があります。ただ、スプシの場合、オーナーの編集は許されていてロックをかけることができません。オーナーも同じく保護してくれるExcelとはちょっと異なります。

 

 

なので、GAS(Google Apps Script)で自作してみました。以下がソースコード。編集時イベントを発生させるonEdit関数を使います。

function onEdit(e){
  //シートごとに編集可能な範囲を指定する。
  var range = "";
  sheet = e.source.getActiveSheet()
  if(sheet.getName()=="(特定のシート名1)") range = "C7:C28";
  if(sheet.getName()=="(特定のシート名2)") range = "A1:D5"; 
  if(range=="") return;

  var val = e.oldValue; //編集前の値
  var r = e.range.getRow();
  var c = e.range.getColumn();
  if(r<sheet.getRange(range).getRow() || r>sheet.getRange(range).getLastRow() ||
      c<sheet.getRange(range).getColumn() || c>sheet.getRange(range).getLastColumn() ){
        e.range.setValue(val);  //編集前の値に戻す
        Browser.msgBox('編集できません');
  }
}
 

 

 

できたことはできましたが、やはりGASでやろうとすると反応が遅いですね。以下が使用例。

 

スポンサーリンク

 - Google Apps Script