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 } );
}
}
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()
は、範囲内のセルの場所ではなく、絶対列を返します。そのために調整するコードを追加する必要があります。