将单元格值添加到范围的公式仅使用第一个值

Adding the cell value to a formula for a range just uses the first value

我只是想在后续步骤中轻松地进行查找和替换。否则,没有理由这样做。

我正在尝试获取单元格区域的值并将它们放入公式中。例如:

=VLOOKUP($A2,IMPORTRANGE("<placeholder_value>","Sheet!A:B"),2,0)

所以如果我有一个像下面这样的 table:

| id | group  | formula |
| -- | ------ | ------- |
| 1  | GROUP1 |         |
| 2  | GROUP1 |         |
| 3  | GROUP1 |         |
| 4  | GROUP1 |         |
| 5  | GROUP1 |         |
| 6  | GROUP2 |         |
| 7  | GROUP2 |         |
| 8  | GROUP2 |         |
| 9  | GROUP2 |         |
| 10 | GROUP2 |         |

我希望 id <=5 的公式为:

=VLOOKUP($A2,IMPORTRANGE("GROUP1","Sheet!A:B"),2,0)

我希望 id >5 的公式为:

=VLOOKUP($A2,IMPORTRANGE("GROUP2","Sheet!A:B"),2,0)

然后当我为 GROUP1GROUP2 生成单独的文件时,我可以在 MASTER 中找到一个替换为实际文档 ID 和 link 文档通过 VLOOKUP 这样 GROUP1GROUP2 中的更新反映在 MASTER 中。 这是一个过于简单化的例子。

所以我到目前为止所做的是:

let placeholderRange = this.sheet.getRange(2, this.groupColumn, this.lastRow - 1, 1);
let formula = '=' + placeholderRange.getValue();
// let formula = '=' + placeholderRange.getValues(); 
// let formula = '=' + placeholderRange.getDisplayValue();
// let formula = '=' + placeholderRange.getDisplayValues();
formulaRange.setFormula(formula);

.getValue().getDisplayValue() 的情况下,它只使用找到的第一个值,因此它会在每个公式中放入 GROUP1 而不是更改为 GROUP2当它到达这些记录时。

.getValues().getDisplayValues() 的情况下,它只是将该范围内所有值的数组添加到公式中。

我可以用 for 循环来完成我想要的,但一开始尽量避免这样做,因为这会减慢自动化速度。

关于如何完成此任务有什么建议吗?

我相信你的目标如下。

  • 您想通过降低流程成本来转换以下情况。

    • 来自

        id  group   formula
        1   GROUP1
        2   GROUP1
        3   GROUP1
        4   GROUP1
        5   GROUP1
        6   GROUP2
        7   GROUP2
        8   GROUP2
        9   GROUP2
        10  GROUP2
      
    •   id  group   formula
        1   GROUP1  =VLOOKUP($A2,IMPORTRANGE("GROUP1","Sheet!A:B"),2,0)
        2   GROUP1  =VLOOKUP($A2,IMPORTRANGE("GROUP1","Sheet!A:B"),2,0)
        3   GROUP1  =VLOOKUP($A2,IMPORTRANGE("GROUP1","Sheet!A:B"),2,0)
        4   GROUP1  =VLOOKUP($A2,IMPORTRANGE("GROUP1","Sheet!A:B"),2,0)
        5   GROUP1  =VLOOKUP($A2,IMPORTRANGE("GROUP1","Sheet!A:B"),2,0)
        6   GROUP2  =VLOOKUP($A2,IMPORTRANGE("GROUP2","Sheet!A:B"),2,0)
        7   GROUP2  =VLOOKUP($A2,IMPORTRANGE("GROUP2","Sheet!A:B"),2,0)
        8   GROUP2  =VLOOKUP($A2,IMPORTRANGE("GROUP2","Sheet!A:B"),2,0)
        9   GROUP2  =VLOOKUP($A2,IMPORTRANGE("GROUP2","Sheet!A:B"),2,0)
        10  GROUP2  =VLOOKUP($A2,IMPORTRANGE("GROUP2","Sheet!A:B"),2,0)
      

根据您的脚本,我认为您的脚本可能是作为 Class 中的方法创建的。如果我的理解是正确的,下面的修改怎么样?

发件人:

let placeholderRange = this.sheet.getRange(2, this.groupColumn, this.lastRow - 1, 1);
let formula = '=' + placeholderRange.getValue();
// let formula = '=' + placeholderRange.getValues(); 
// let formula = '=' + placeholderRange.getDisplayValue();
// let formula = '=' + placeholderRange.getDisplayValues();
formulaRange.setFormula(formula);

收件人:

const range = this.sheet.getRange(2, this.groupColumn, this.lastRow - 1, 1);
const formulas = range.getValues().map(([v]) => [`=VLOOKUP($A2,IMPORTRANGE("${v}","Sheet!A:B"),2,0)`]);
range.offset(0, 1, formulas.length, 1).setFormulas(formulas);
  • 在此修改后的脚本中,当 this.groupColumn 是“group”列时,=VLOOKUP($A2,IMPORTRANGE("${v}","Sheet!A:B"),2,0) 的公式是使用“group”列的值创建的。

参考文献: