工作表公式模板

Sheets Formula Template

有没有办法设置一个包含公式的单元格,并让其他单元格复制该公式并在本地应用它?

请参阅示例 sheet。

我在单元格 B6:B11 中设置公式,引用单元格 E6:E11。我希望单元格 B16:B21 使用与单元格 B6:B11 和引用 E16:E21 相同的公式。当我更改 B6:B11 中的公式时,我希望它自动应用于其余的相关单元格。 我曾尝试通过 INDIRECT 执行此操作,但没有成功,而且我无法将 ARRAYFORMULA 应用于我需要做的所有事情。我还尝试设置一个使用 MOD(ROW()) 的单元格来检查行号并应用公式。这是一个非常长的公式,并且总是引用父行,而不是子行。

提前致谢!

https://docs.google.com/spreadsheets/d/1SXeTv25Vh6as9bSTNW7B-GcdnIyaf0YAVClRKPkjsm8/edit?usp=sharing

可以使用脚本。示例:

function onEdit() { 
var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');  // sheet name
var src = sheet.getRange("G2");                                   // cell which holds the formula
var str = src.getValue();  
var cell = sheet.getRange("G10");                                 // cell where I want the results
cell.setFormula(str);              
}

应用示例:

您手上有一个有趣的问题,我认为它的解决方案比看起来更容易。我写了一个小脚本,你可以作为指导,相信没有经验的你也能完成。

const ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1')

const setDynamicFormulas = () => {
  /* Create the dinamic formulas */
  const formula1 = (n) => `=IFS(B${n}<=10,40,B${n}>10,50)`
  const formula2 = (n1, n2) => `=SUM(E${n1}:E${n2})`
  /* We loop over the sheet making 10 cell jumps */
  for (let i = 0; i < 100; i = i + 10) {
    /* Assing the values for our formulas */
    const f1 = formula1(7 + i)
    const f2 = formula2(5 + i, 14 + i)
    /* Set the values for the formulas */
    ss.getRange(6+i, 2).setFormula(f1)
    ss.getRange(7+i, 2).setFormula(f2)
  }
}

我在脚本中所做的是为每个要迭代的公式创建一个动态公式。例如,对于 B6:=IFS(B7<=10,40,B7>10,50) 中的公式,我们意识到动态部分是在以下迭代中引用 B7 的部分将是:B17 , B27, 等等... 所以,我们已经知道每次迭代数字增加十个单位。我们如何使用这些信息编写动态公式?很简单,我们只需在 ${} 之间指明我们的动态部分。它看起来像这样:

const formula1 = (n) => `=IFS(B${n}<=10,40,B${n}>10,50)`
// formula1(17) will be  =IFS(B17<=10,40,B17>10,50)

好的,但是下一个公式会发生什么? =SUM(E5:E14) 我们有两个动态部分,对吧?没问题,我们指出两个动态部分:

const formula2 = (n1, n2) => `=SUM(E${n1}:E${n2})`
// formula2(15, 24)  wil be   =SUM(E15:E24)

下一步是什么?正如我们所说,我们需要进行 10 个单位的跳跃,因此我们需要一个进行这些跳跃的 for 循环,动态创建公式并将其分配给每个单元格。

for (let i = 0; i < 100; i = i + 10) {
    // The cell starts at 7, so we need to add it
    const f1 = formula1(7 + i)
    // Assign the value to the cell
    ss.getRange(6+i, 2).setFormula(f1)
}

恭喜!您已经在需要的地方有了公式并进行了动态修改。你只需要用剩下的每个公式来填充它。

文档