工作表公式模板
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)
}
恭喜!您已经在需要的地方有了公式并进行了动态修改。你只需要用剩下的每个公式来填充它。
文档
有没有办法设置一个包含公式的单元格,并让其他单元格复制该公式并在本地应用它?
请参阅示例 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)
}
恭喜!您已经在需要的地方有了公式并进行了动态修改。你只需要用剩下的每个公式来填充它。