20

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 } );
    }
}
4

1 に答える 1

24

https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getrangebynamename

名前付き範囲の 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()と、範囲内のセルの位置ではなく絶対列が返されるため、これは機能しません。それを調整するには、コードを追加する必要があります。

于 2012-09-28T04:28:31.057 に答える