我看起来并没能得到我的具体答案。我要做的是拥有一个完全欠款的单元格和一个付费单元格。我希望总欠款减去支付的金额,并将自己更新为新的较小金额,这样当我在相同金额的付费单元格中输入另一个金额时,它会再次从先前更新的金额中减去。我尝试过不同的公式,但最后我总是遇到循环依赖错误。有没有办法让细胞按特定顺序计算?首先执行单元格a21,然后使用a21中的更新值执行单元格b21,依此类推。
答案 0 :(得分:3)
您需要使用VBA脚本来实现您的需求。
代码需要位于相关工作表的Worksheet_Change
事件处理程序中。
本质上代码应该使用以下逻辑
Optionaly,清除已付金额。
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
答案 1 :(得分:1)
Google Apps脚本中的onEdit()
触发功能可以轻松完成此操作。
请参阅Understanding Events和Understanding 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) 另外,您还可获得历史数据作为奖励。