【问题标题】:Google Sheets: automatically apply formula to new rows added at the topGoogle表格:自动将公式应用于顶部添加的新行
【发布时间】:2016-07-10 00:38:08
【问题描述】:

我有一个简单的问题,无论是简单的还是其他的,我都找不到答案!

我的电子表格看起来像这样(比如说)

   A       B      C
1  Name  Amount  Tax 
2  Neil    20      2
3  Rose    100     10

现在 C 列是通过公式 B/10 计算的。我想插入一个新行 ABOVE ROW 2(不是最后),我希望公式应用于 C 列中的新行。

我找不到自动执行此操作的方法。我知道怎么做

  • 通过复制和粘贴或抓住句柄手动复制公式(当然有很多列我实际上想要这样做)
  • 使用数组公式来扩展公式。我的问题是 如果我像这样使用数组公式:arrayformula(B2:B/10) 如果我在最后添加行,那就太好了。但是,当我插入一行,成为新的第 2 行时,发生的情况是公式仍然与我输入的原始单元格链接并更改为 arrayformula(B3:B/10),这是合乎逻辑的,但不是我想要的,因为新的第 2 行没有关联的公式有了它
  • 如果我使用arrayformula(B:B/10),那么它适用于包括第 1 行(列标题)在内的所有行,并且对位置感到非常困惑。

一定有办法,所以我问你,互联网寻求你的帮助:-)

【问题讨论】:

    标签: google-sheets


    【解决方案1】:

    ARRAYFORMULA 实际上在这种情况下工作,如果您将它放在单元格 C1 中,如下所示:

    =ARRAYFORMULA(IF(ROW(B:B)=1, "Tax", IF(ISBLANK(B:B), "", B:B/10)))
    
    1. 如果当前行是第一行,则将单元格的值设为“税”。
    2. 否则,如果为空,则留空。
    3. 否则尝试使用B:B/10 进行税收计算。

    【讨论】:

    • 这是一个很好的答案(不需要 AppScripts),但有几个注意事项:使用 ; 而不是 ,。您需要允许在工作表上进行迭代计算才能使公式起作用。不错。
    • 但是,如果您尝试覆盖该范围内的任何单元格内容,它将严重损坏。
    • 这确实是一个很好的答案,但要注意性能:ArrayFormula 计算时间会随着您使用的行数而迅速增加。
    【解决方案2】:

    这是一种使用 Apps 脚本在顶部插入新行并将公式复制到新行的方法。根据您的数据的复杂程度,可能需要进行一些自定义,但希望您能理解。

    // global 
    var ss = SpreadsheetApp.getActive();
    
    
    function addFirstRow() {
        var firstRow = 2;
        var sh = ss.getActiveSheet();
        var lCol = sh.getLastColumn();
        var range = sh.getRange(firstRow, 3, 1, lCol);
        var formulas = range.getFormulas();
        sh.insertRowsAfter(1, 1);
        newRange = sh.getRange(firstRow, 3, 1, lCol);
        newRange.setFormulas(formulas);
    }

    【讨论】:

    • 看了一下,好像有触发器,简单可安装。我想我需要后者,并且脚本需要更改为不添加行,而只是将公式(有 3 列带有公式)复制到新生成的行中......
    猜你喜欢
    • 2019-04-29
    • 2019-05-01
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    相关资源
    最近更新 更多