スプレッドシート内の特定の1つのシートのみにスクリプトを適用するにはどうすればよいですか?


9

Robinおよびという2つのシートを含むスプレッドシートがありLucyます。列Aにデータを追加するたびに、シート上のデータを並べ替えるスクリプトを作成/発見/変更しました。

function onEdit(event){

  var sheet = event.source.getActiveSheet();
  var editedCell = sheet.getActiveCell();

  var columnToSortBy = 1;
  var tableRange = "a2:I30";
    if(editedCell.getColumn() == columnToSortBy){   
   var range = sheet.getRange(tableRange);
   range.sort( { column : columnToSortBy } );
  }
}

このスクリプトは適切に機能しますが、最初のシートにのみ適用したいと思いRobinます。2番目のシートのデータLucyは同じではないので、この問題に気づいたら、その範囲の別の範囲用に別のスクリプトを作成します。

を使用する必要があると思いますgetSheetByName("Robin")が、動作させることができません。

回答:


12

これを行うにはいくつかの方法があります。まず、スプレッドシートを宣言する必要があります。

var ss = SpreadsheetApp.getActiveSpreadsheet();  

次に、最初のシートを次のように宣言します。

var sh0 = ss.getSheets()[0];

またはこのように:

var sh0 = ss.getSheetByName("Robin");

次に、アクティブセルを設定し、列インデックスを取得します。

var editedCell = sh0.getActiveRange().getColumnIndex();

そして、ソートのロジックを実行します。

var columnToSortBy = 1;
var tableRange = "a2:I30";

if(editedCell == columnToSortBy){   
  var range = sheet.getRange(tableRange);
  range.sort( { column : columnToSortBy } );
}

完全なコード、少し短く:

function onEdit(){
  var sh0 = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
  var editedCell = sh0.getActiveRange().getColumnIndex();

  if(editedCell == 1) { 
    var range = sh0.getRange("A2:I30");
    range.sort({column: 1});
  }
}

あなたはそれをマークすることによって答えを受け入れることができ@oohrogerplamer、この参照のFAQエリアを。どういたしまして。
Jacob Jan Tuinstra、2013

列で並べ替えるにはどうすればよいですか。他の列も並べ替えて、すべてのデータが行で一致するようにしますか?
moobot、2015年

1

関連するシート(スプレッドシート)を取得し、どのタブ(シート)にフォーカスするかを指定します。

var theSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Robin");
// do the thing
var theSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Lucy"); 
// do the other thing

リファレンス:https : //developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getSheetByName(String)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.