web-dev-qa-db-ja.com

スクリプトを使用した名前付き範囲のGoogleスプレッドシートを含むgetRange

getRangeを使用して、領域の代わりに名前付き範囲を設定できますか?
私がそうしているように見えるとき、それは引数が範囲でなければならないと言います。例えば、

の代わりに:

     getRange("A4:E7");

A4:E7の領域は、sheet1で「名前」と呼ばれる名前付き範囲になりました。

おそらく使用できますか:

var tableRange = SpreadsheetApp.getActiveSpreadsheet();.getRangeByName("Names");
getRange(tableRange);

またはそれを行う他の方法はありますか?完全なコードは次のとおりです。

function onEdit(event){
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var editedCell = ss.getActiveCell();

    var columnToSortBy = 1;
    var tableRange = ss.getRangeByName("Names");

    if(editedCell.getColumn() == columnToSortBy){ 
        var range = ss.getRange(tableRange); 
        range.sort( { column : columnToSortBy } );
    }
}
13
user1658604

https://developers.google.com/apps-script/class_spreadsheet#getRangeByName

名前付き範囲のA1アドレスを返すカスタム関数:

_function myGetRangeByName(n) {  // just a wrapper
  return SpreadsheetApp.getActiveSpreadsheet().getRangeByName(n).getA1Notation();
}
_

次に、スプ​​レッドシートのセルで:

_=myGetRangeByName("Names")
_

これにより、「名前」が定義されているものはすべてセルに配置されます。 GASの積極的なキャッシュのため、「名前」を再定義しても更新されません。ただし、シートの計算ごとにGASに強制的に更新させることはできます。

_=myGetRangeByName("Names",now())
_

JavaScriptは未使用のパラメーターを無視します。

次のコードは、あなたが意図していると思うことを実行します。シートの最初の列が編集されると、その列に基づいて範囲が並べ替えられます。

_function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var editedCell = ss.getActiveCell();
  var columnToSortBy = 1;
  var tableRange = ss.getRangeByName("Names");
  if ( editedCell.getColumn() == columnToSortBy ) {
    tableRange.sort(columnToSortBy);
  }
}
_

リストを列Aから移動した場合、これは機能しません。getColumn()は、範囲内のセルの場所ではなく、絶対列を返します。そのために調整するコードを追加する必要があります。

16
HardScale