正在使用';如果';在excel公式中对性能有害?

正在使用';如果';在excel公式中对性能有害?,excel,Excel,我决不是excel或VBA程序员。我正在看一个excel文件,想知道其中一个公式。程序员将这个公式添加到一个单元格中 =IF(F2“”(D2/((平均值(F2:G2)*$R$21)+1)),D2) 我想知道的是,这个if语句是否易变。也就是说,If语句是否始终在整个工作簿中侦听更改,这是否会对性能产生负面影响 可以使用If语句,因为它可能是一个合理的数据大小,Excel可以快速计算公式。如果有关If语句的数据发生更改,它将快速重新计算。可以使用If语句,因为它可能是一个合理大小的数据,Excel

我决不是excel或VBA程序员。我正在看一个excel文件,想知道其中一个公式。程序员将这个公式添加到一个单元格中

=IF(F2“”(D2/((平均值(F2:G2)*$R$21)+1)),D2)


我想知道的是,这个
if
语句是否易变。也就是说,
If
语句是否始终在整个工作簿中侦听更改,这是否会对性能产生负面影响

可以使用
If
语句,因为它可能是一个合理的数据大小,Excel可以快速计算公式。如果有关
If
语句的数据发生更改,它将快速重新计算。

可以使用
If
语句,因为它可能是一个合理大小的数据,Excel可以快速计算公式。如果有关
If
语句的数据发生更改,它将快速重新计算。

性能在这里不是一个问题——事实上,Excel工作簿中的每个公式都会在任何工作表上的单元格发生更改时重新计算,除非您将计算模式更改为“手动”(请参见“公式”选项卡)。这只是一个性能方面的问题,尤其是在具有大量查找、sumifs/countifs,尤其是数组公式的复杂工作簿中。只有在您真正需要等待工作簿重新计算后才能执行任何操作时,才值得考虑。将计算模式更改为手动本身可能是一个问题,因为这会使您忘记手动运行计算


编辑:正如@chrisneilsen所指出的,我上面的陈述是不正确的。有关详细信息,请参阅。

性能不是问题所在——事实上,Excel工作簿中的每个公式都会在任何工作表上的单元格更改时重新计算,除非您将计算模式更改为“手动”(请参见“公式”选项卡)。这只是一个性能方面的问题,尤其是在具有大量查找、sumifs/countifs,尤其是数组公式的复杂工作簿中。只有在您真正需要等待工作簿重新计算后才能执行任何操作时,才值得考虑。将计算模式更改为手动本身可能是一个问题,因为这会使您忘记手动运行计算


编辑:正如@chrisneilsen所指出的,我上面的陈述是不正确的。有关更多信息,请参阅。

如果
语句对性能没有负面影响,请参阅。事实上,这取决于函数中使用的逻辑文本的复杂性。在上述情况下,您可能不会有任何问题

If
语句对性能没有负面影响。事实上,这取决于函数中使用的逻辑文本的复杂性。在上述情况下,您可能不会有任何问题

绩效是一个相对的概念
如果
将成为全球数百万张电子表格中最常用的十大公式之一?你能在没有
IF
语句的情况下重写这个公式吗?不行。实际上,我希望if函数版本比没有if
=D2/(平均值(F2:G2)*$R$21*(F2“”)+1)的版本快一点。
性能是一个相对的概念
如果
将成为全球数百万张电子表格中最常用的十大公式之一?你能在没有
IF
语句的情况下重写这个公式吗?不行。实际上,我希望if函数版本比没有if
=D2/(平均值(F2:G2)*$R$21*(F2“”)+1)的版本快一点。
这不是真的。当公式所依赖的一个或多个单元格发生更改时,公式会重新计算(例外:易失性函数,例如每次重新计算时间接重新计算),因此,如果我有一个包含大量数据的大型excel文件,从长远来看,使用这个
if
语句会比使用一个只在调用时才反应的宏更麻烦吗?啊,是的,@chrisneilsen你说得对。事实上,我不知道有一个依赖链。我在想rand()和indirect()总是如何重新计算的。我会修改我的答案。@JasonChen,不,不要走宏路线。“如果”是非常基本的和自我记录的。无论如何,你必须在宏中放入相同的条件逻辑,而且它会更加不透明,因为你必须打开VBA窗口才能看到它。这不是真的。当公式所依赖的一个或多个单元格发生更改时,公式会重新计算(例外:易失性函数,例如每次重新计算时间接重新计算),因此,如果我有一个包含大量数据的大型excel文件,从长远来看,使用这个
if
语句会比使用一个只在调用时才反应的宏更麻烦吗?啊,是的,@chrisneilsen你说得对。事实上,我不知道有一个依赖链。我在想rand()和indirect()总是如何重新计算的。我会修改我的答案。@JasonChen,不,不要走宏路线。“如果”是非常基本的和自我记录的。无论如何,您都必须在宏中放入相同的条件逻辑,而且它会更加不透明,因为您必须打开VBA窗口才能看到它。感谢您对堆栈溢出的第一个回答。您是否有可以引用的参考资料,或者您可以提供的链接来支持您的答案?谢谢您关于堆栈溢出的第一个答案。你有没有可以引用的参考资料,或者你可以提供的链接来支持你的答案?