名前付き範囲は、特定のシート上の特定のセル範囲を参照します。これがすぐに変更されることはありません。
しかし、これはスプレッドシートのスクリプトに入れることができるカスタム関数で、範囲を「ローカライズ」します。このコードは、この Gistからダウンロードすることもできます。
/*
* Return a string with the A1 notation for the given range, with
* the sheet reference removed. To use in spreadsheet functions,
* enclose with INDIRECT().
*
* Example:
* =index(INDIRECT(localizeNamedRange(NamedRange1)),12,4)
*
* @param {string} rangeName The name of an existing range in the
* active spreadsheet. It does not matter which
* sheet the range was defined for.
*
* @return {string} The cell range from the provided rangeName,
* in A1 notation.
*/
function localizeNamedRange( rangeName ) {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
// Get range by name
var origRange = sheet.getRangeByName(rangeName);
// Get notation for the range, without sheet reference.
var notation = "";
if (origRange !== null) {
notation = origRange.getA1Notation();
}
// Return range in A1 notation
debugger; // pause to examine if running in debugger
return ( notation );
}
例を次に示します。NamedRange1 は「Sheet1!A10:A22」として定義されています。=localizeNamedRange(NamedRange1)
セルを入力すると、 への参照なしで が返されA10:A22
ますSheet1
。これは文字列なので、範囲が必要な数式で使用する場合は、変換する必要があります。変換を行うには、組み込み関数を使用しますINDIRECT()
。
Sheet1 のセル A3 には、NamedRange1 の平均値を計算する数式があります。その数式を定義してローカライズ可能にする方法は次のとおりです。
(A3) =AVERAGE(INDIRECT(localizeNamedRange(NamedRange1));
ここでシート 1 を新しいシート 2 にコピーすると、名前付き範囲がシート 1 を参照している場合でも、数式が引き続き機能し、シート 2 のデータに対して計算が実行されることがわかります。