2012-09-09 17 views
5

getRangeは領域の代わりに名前付き範囲を使用できますか?
私はそれをやっているようだが、引数は範囲でなければならないと言います。例えば 、スクリプトを使用して名前付き範囲のGoogleスプレッドシートを持つgetRange

の代わりに:

 getRange("A4:E7"); 

A4:E7の面積は、シート1に「名前」と呼ばれる名前付き範囲に行われています。

あなたはおそらく使用できます。

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 }); 
    } 
} 
+0

Googleスクリプトで定義された名前を使用できない理由が分かりません – user1658604

+0

あなたの問題に対する答えではなく、ちょっとした提案です:あなたは 'getActiveCell()'は必要ありません。 editイベントは編集された範囲をスクリプトに渡すので、単に 'event.range.getColumn()'を使うことができます。 – Tharkon

答えて

10

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

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

=myGetRangeByName("Names") 

これをスプレッドシート上のセルに、

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

その後「名前」がセルに定義されているものをすべて入れます。 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); 
    } 
} 

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

+0

これは 'now()'とは何ですか?私はそれをシートに入れて、それがエラーを起こした。 – jcollum

+0

https://support.google.com/drive/bin/static.py?hl=ja&topic=25273&page=table.cs&tab=1240285 – HardScale

+0

now()パラメータは+1してください。 – mTorres

関連する問題