1.非必要的情况下,不使用可变函数(易失性函数)。
Excel的可变函数有:RAND、NOW、TODAY、OFFSET、CELL、INDIRECT和INFO。可变函数有个特点,当数值发生变化时,每次都要重新计算,因而会影响表格的计算性能。
比如,我们常用的下面的公式来定义动态区域:
=OFFSET(Sheet1!$A$1,0,0,COUNTA(Sheet1!$A:$A),1)
它的好处是:会自动扩展以包含新条目,但表格的计算性能会降低,这是因为OFFSET 是可变函数,并且由于OFFSET 中的COUNTA 函数必须检查很多行,计算效率较低。
一般情况下,我们可以使用Excel的表格功能来代替动态区域(Excel 2003中称为列表)。
2.使用其他行和列计算并存储中间结果一次,以便在其他公式中重复使用它们。并且,如前所述,尽可能引用其他单元格已有的计算结果,这样可提高运算效率。
在C2单元格输入公式:
=SUM($A$2:$A2)
然后向下填充公式到C2000。如上图。B列的公式是上一累加结果加上本行数字。B列的公式是引用了上一行单元格的计算结果,B列公式比C列公式单元格引用总数减少了500倍,计算量大大减少。
3.减少每个公式中的引用数,最大程度地减少函数中的引用单元格范围。
尽管在Excel 2007以后的版本中,数组公式可以处理整列引用,但是这会强制计算列中的所有单元格,包括空单元格。这样会使表格计算起来很缓慢。
4.尽可能使用最有效的函数(一般情况下自定义函数慢于Excel 中的内置函数),编制适当的公式,尽可能减少公式的计算次数
=IF(ISERROR(VLOOKUP("龙逸凡",$A$2:$C$1000,3,0)),"查无此人",VLOOKUP("龙逸凡",$A$2:$C$1000,3,0))
如果表格A2:A1000中有“龙逸凡”,使用上面这个公式,则Excel 要运算VLOOKUP函数两次。Excel 2007以后的版本中,可以使用IFERROR 来减少运算的次数:
=IFERROR(VLOOKUP("龙逸凡",$A$2:$C$1000,3,0),"查无此人")