在使用IF函数时,如果条件为假,Vineet希望在单元格中保留旧值。换句话说,仅当IF函数测试的条件为真时,使用IF函数的单元格中的值才应更改。但是,默认情况下,如果条件为False,则IF函数将值设为0。

IF功能最多可以包含三个参数。第一个参数是要进行的比较,第二个参数是在比较为true时应返回的参数,第三个参数是在比较为false时应返回的参数。可以省略最后一个参数,但是如果比较失败,则Excel将返回值0。 (这就是Vineet通过其IF函数用法返回的内容。)

那么,显而易见的解决方案是确保为IF函数提供在比较为假时应返回的内容。例如,假设您的公式在单元格B1中,而您正在比较单元格A1中的某些内容。您使用的公式可能如下所示:

=IF(A1<10,"under ten",B1)

请注意,如果A1中的值小于10,则返回单词“低于10”。如果不满足此条件,则返回B1中的值。

由于此公式位于单元格B1中,因此,如果条件为false,则返回单元格中的先前值。

这也意味着该公式包含一个循环引用。为了使循环引用正常工作,您需要让Excel知道可以在工作表中进行循环引用。如果使用的是Excel 2010或更高版本,请按照以下步骤操作:

。显示功能区的“文件”选项卡,然后单击“选项”。 Excel将显示“ Excel选项”对话框。

。在对话框的左侧,选择“公式”。 (请参见图1。)

。确保选中“启用迭代计算”复选框。

。单击确定。

如果您使用的是Excel 2007,请选择“工具” |“工具”。选项|计算选项卡,并确保选中迭代复选框。 Excel现在将允许在没有投诉的情况下进行循环引用。

如果您不想在工作表中使用循环引用,那么唯一的办法就是创建一个宏,该宏根据对单元格A1的任何更改来更新单元格B1中的值:

Private Sub Workbook_SheetChange(ByVal Sh As Object, _   ByVal Target As Range)



' See if the change is related to our cell     If Not (Application.Intersect(Target, Range("A1")) _       Is Nothing) Then         If Range("A1") < 10 Then             Range("B1") = "under ten"

End If     End If End Sub

每当工作簿中有更改时,都会执行此简单宏,并将其添加到ThisWorkbook模块中。如果值是单元格A1发生了更改(并且只有该单元格),那么将检查该值以查看其是否小于10。如果是,则更改单元格B1中的值。如果不是,那么将保留单元格B1中的值。

到目前为止讨论的任何方法,公式或宏都需要牢记一个“陷阱”。如果单元格A1中的值是15(假设),则单元格B1中将包含之前的内容。如果将单元格A1中的值更改为7,那么B1将更改为“低于10”。很好,但是从那时起,单元格B1似乎永远不会改变。为什么?因为如果随后将单元格A1的值更改为大于10,则单元格B1将包含(如前所述)之前的内容。而且,正如您现在所了解的,以前存在的值是前一个真实结果的结果,即“小于10”。因此,从这一点来看,公式或宏的正确与否显示的文字是“低于10”。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(8264)适用于Office 365中的Microsoft Excel 2007、2010、2013、2016、2019和Excel。您可以在此处为Excel的较旧菜单界面找到此技巧的版本: