2

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

4

3 回答 3

3

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

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

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

  1. 检查正在更新的单元格是否为支付金额单元格
  2. 重新计算欠款总额
  3. (可选)清除支付的金额。

    Private Sub Worksheet_Change(ByVal Target As Range)

    结束子

于 2013-08-17T16:18:51.403 回答
1

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

截屏

请参阅了解事件了解触发器中的“电子表格编辑事件” 。

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);
  }
}
于 2013-09-11T19:50:47.610 回答
0

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

于 2013-09-11T20:16:47.773 回答