正在使用'如果'在excel公式中对性能不利?

问题描述:

我绝不是一个excel或VBA程序员。我正在看一个excel文件的工作,并想知道关于其中一个公式的东西。程序员将此公式添加到其中一个单元格中。正在使用'如果'在excel公式中对性能不利?

=IF(F2<>"",(D2/((AVERAGE(F2:G2)*$R$21)+1)),D2)

我想知道如果这If说法是挥发性的。也就是说,If声明总是倾听整个工作簿中的更改,这是否会对性能产生负面影响?

+0

表现是一个相对的概念。 “IF”将会成为全球数百万个电子表格中使用最多的10个公式中的哪一个?你能否在没有IF语句的情况下重写该公式? –

+0

否http://beatexcel.com/volatile-functions-excel/。我实际上期望if函数版本比没有if = D2 /(AVERAGE(F2:G2)* $ R $ 21 *(F2 “”)+ 1)' – Slai

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

+0

感谢您在Stack Overflow上的第一个答案。你有没有可以引用的参考资料,或者你可以提供哪些链接来支持你的答案? –

If声明可以很好地使用,因为它可能是一个合理的大小数据,Excel可以快速计算公式。如果数据在If声明中发生变化,它将快速重新计算它。

性能是不是在这里一个问题 - 事实上公式中的Excel工作簿上重新计算任何工作表中的单元格的任何时间改变,除非你改变了计算模式为“手动”(见公式选项卡)。在特别复杂的工作簿中,这只会成为一个问题,在性能方面,有很多查找,sumifs/countifs,尤其是数组公式。只有在您可以做任何事情之前,您实际上必须等待工作簿重新计算之后,才值得考虑一下。将计算模式更改为手动本身可能是一个问题,因为它会让您忘记手动运行计算。

编辑:作为@chrisneilsen笔记,我上面的声明是不正确的。有关更多信息,请参阅this article

+2

这个版本有点快。一个公式重新计算它依赖的一个或多个单元格的变化(例外:在每次重新计算时都会使用例如INDIRECT重新计算的volatile函数) –

+0

因此,如果我有一个包含大量数据的大型excel文件,长时间运行比只有在被调用时才会作出反应的宏更麻烦? –

+1

啊,你,@ chrisneilsen你是对的。实际上有一个我不知道的依赖链。我正在考虑rand()和indirect()如何重新计算。我会修改我的答案。 –