单元格错误时在Excel中保留以前的值

单元格错误时在Excel中保留以前的值,excel,function,Excel,Function,我想知道一种方法,如果新计算有错误,电子表格上的单元格可以保留以前的值。作为一个简化的例子: A B C 1 1 2 =A1/B1 单元格C1将包含0.5。现在,如果我将B1更改为0,我希望C1保持在0.5,而不是显示#DIV/0。我尝试使用IFERROR函数,但它会导致循环引用 我希望在非启用宏的工作簿中使用此功能。简单……首先在Excel选项中启用迭代计算,最多迭代1次……然后设置A1、B1(as 2)和C1,如您的示例所示…………然后在D1中: =IF(ISE

我想知道一种方法,如果新计算有错误,电子表格上的单元格可以保留以前的值。作为一个简化的例子:

    A   B   C
1   1   2   =A1/B1
单元格C1将包含
0.5
。现在,如果我将B1更改为
0
,我希望C1保持在
0.5
,而不是显示
#DIV/0。我尝试使用
IFERROR
函数,但它会导致循环引用


我希望在非启用宏的工作簿中使用此功能。

简单……首先在Excel选项中启用迭代计算,最多迭代1次……然后设置A1B1(as 2)和C1,如您的示例所示…………然后在D1中:

=IF(ISERROR(C1),D1,C1)
然后设置B1=0

如果C1出错,D1将冻结到最后一个非错误值

编辑#1

根据pnuts的评论:

=IF(ISERROR(A1/B1),C1,A1/B1)

可以放置在C1中,以实现准确的行为您要么使用迭代计算方法(及其所有缺点),要么使用类似SpeedTools(成本,64位和32位)Previous()函数或MoreFunc(免费,仅32位)Recall()函数的方法。SpeedTools和MoreFunc都是XLL加载项,因此不需要启用宏的工作簿,但需要安装XLL加载项

您可以使用VBA和启用宏的工作簿以笨拙的方式执行此操作:请参阅

免责声明:我开发并销售SpeedTools插件(使用64位Excel,包括64位和32位)

@pnuts:我们可以在C1中放置=IF(iError(A1/B1)、C1、A1/B1)以实现该结果,但无法验证接下来会发生什么。