从一个单元格值到现有单元格值的递归加法函数

Recursive additive function from one cell value to an existing cell value

我正在使用 google 张纸。我有一个这样的工作表:

(抱歉,我不知道如何link这里的图片。而且我用文字制作的table变得参差不齐)

当用户将 A1 的值从 100 更改为 150 时,我希望 B1 的值从 200 更改为 350。下一次用户将 A1 的值从 150 更改为 200 时,我希望 B1 的值从 350 更改为 550...并且等等。

遗憾的是,我是编程新手。所以,我正在学习如何在 Google 表格中使用脚本。

一个可能的解决方案,假设第一行中的所有值都会触发其余部分的更新。

已编辑:调整为仅考虑 A1 中的变化,并始终将 A1 的新值添加到第一行的其他单元格;还强制脚本这样解释数字以避免一些不需要的连接。

function onEdit(e){
  if (e.range.getA1Notation() == "A1") { 
    var difference = isNaN(e.value) ? 0 : Number(e.value); // New value of A1 to be added to the other cells in first row ; only taking numbers into account
    var firstRowValues = e.range.getSheet().getRange("1:1").getValues(); // Get the current values of the first row
    for (var c = 1 ; c < e.range.getSheet().getLastColumn() ; c++){
      // Go through each value in first row
      // If it has a value already, and if that value is a number, add the difference
      if (firstRowValues[0][c] && !isNaN(firstRowValues[0][c])) firstRowValues[0][c] = Number(firstRowValues[0][c]) + difference;
    }
    e.range.getSheet().getRange("1:1").setValues(firstRowValues); // Set the updated value in the sheet's first row

  }
}

已编辑:添加原始问题中的屏幕截图后,我了解到只有 B1 需要更新,因此代码可以简化如下:

function onEdit(e){
  if (e.range.getA1Notation() == "A1") { 
    var difference = isNaN(e.value) ? 0 : Number(e.value); // New value of A1 to be added to the other cells in first row ; only taking numbers into account
    var valueB1 = e.range.getSheet().getRange("B1").getValue(); // Get the current values of B1
    if (valueB1 && !isNaN(valueB1)) valueB1 = Number(valueB1) + difference; // Only updating if B1 has a value which is a number
    e.range.getSheet().getRange("B1").setValue(valueB1); // Set the updated value in B1  
  }
}
=ARRAYFORMULA(IF(LEN(A1:A), SUMIF(ROW(A1:A), "<="&ROW(A1:A), A1:A)+A1, ))