按特定顺序汇总Google Spreadsheet单元格

时间:2013-08-17 15:54:32

标签: google-apps-script google-sheets

我看起来并没能得到我的具体答案。我要做的是拥有一个完全欠款的单元格和一个付费单元格。我希望总欠款减去支付的金额,并将自己更新为新的较小金额,这样当我在相同金额的付费单元格中输入另一个金额时,它会再次从先前更新的金额中减去。我尝试过不同的公式,但最后我总是遇到循环依赖错误。有没有办法让细胞按特定顺序计算?首先执行单元格a21,然后使用a21中的更新值执行单元格b21,依此类推。

3 个答案:

答案 0 :(得分:3)

您需要使用VBA脚本来实现您的需求。

代码需要位于相关工作表的Worksheet_Change事件处理程序中。

本质上代码应该使用以下逻辑

  1. 检查正在更新的单元格是付费单元格数
  2. 重新计算欠款总数
  3. Optionaly,清除已付金额。

    Private Sub Worksheet_Change(ByVal Target As Range)

    End Sub

答案 1 :(得分:1)

Google Apps脚本中的onEdit()触发功能可以轻松完成此操作。

Screenshot

请参阅Understanding EventsUnderstanding Triggers中的“电子表格编辑事件”。

function onEdit(e) {
  // For simplicity, we'll use A1 notation to refer to cells & ranges
  var cellA1Notation = e.range.getA1Notation();

  // Check if a new payment was made
  if (cellA1Notation == 'B2') {
    // Make sure we're dealing with a number
    var payment = eval(e.value.valueOf())

    // Archive payment
    var pastPaymentRange = e.range.getSheet().getRange('B3:C3');
    pastPaymentRange.setValues([[payment,new Date()]]);
    e.range.clear(); // Clear payment

    // Update total payment
    var totalPaymentRange= e.range.getSheet().getRange('B4');
    var totalPayment = totalPaymentRange.getValue();
    if (typeof totalPayment !== 'number') totalPayment = 0;
    totalPayment += payment;
    totalPaymentRange.setValue(totalPayment);

    // Update balance
    var balanceRange = e.range.getSheet().getRange('B5');
    var balance = balanceRange.getValue();
    if (typeof balance !== 'number') balance = 0;
    balance -= payment;
    balanceRange.setValue(balance);
  }
}

答案 2 :(得分:0)

您可以通过更改策略来避免脚本和循环引用。 每次进/出钱时都要添加一个新行。你的公式只会将总和加起来(a3:a) 另外,您还可获得历史数据作为奖励。