【问题标题】:How to reference the current spreadsheet in a named range in Google Spreadsheets?如何在 Google 电子表格的命名范围内引用当前电子表格?
【发布时间】:2013-01-09 14:23:35
【问题描述】:

在同一个文档(工作簿)中,每当我创建命名范围时,我都会有类似 Sheet1!A1 的内容,但它总是引用 Sheet1。有什么方法可以让我参考 current 电子表格吗?

如果我目前在Sheet1Sheet200!A1 如果我在Sheet200,则this!A1 之类的东西将变成Sheet1!A1

目的是在工作簿的所有电子表格中重复使用相同的公式(已经具有命名的间隔)。我发现这个全局和固定参考相当愚蠢。这样,我总是必须为每个电子表格重新创建公式。

【问题讨论】:

    标签: google-apps-script google-docs google-sheets


    【解决方案1】:

    命名范围是指特定工作表上的特定单元格范围 - 我认为这种情况不会很快发生变化。

    但这里有一个自定义函数,您可以将其放入电子表格的脚本中,该函数将为您“本地化”范围。此代码也可供下载in this 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));
    

    如果您现在将 Sheet1 复制到新的 Sheet2 中,您会发现该公式仍然有效,并且它对 Sheet2 上的数据执行计算,即使命名范围引用 Sheet1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多