关于函数的效率问题,可以分几大类来说: 一,LOOKUP函数 它的查找机理使用“二分法”,即从数据区域的中间开始查找,找到一个就停止。详见onkey的相关帖子 对于N个数据,它的平均查找次数是LOG(N,2)【即以2为底的N的对数】 二,VLOOKUP,HLOOKUP,MATCH的模糊查找 这几个函数有模糊查找和精确查找两种。 模糊查找的运行机理、查找速度和上述LOOKUP一样,都是二分法查找,次数为LOG(N,2)
三,VLOOKUP,HLOOKUP,MATCH的精确查找 他们的精确查找采用顺序查找,即从头到尾逐个查找,但只要找到一个,就停止。所以它们的平均查找次数是:N/2
四,SUMIF和COUNTIF 这两个不是查找函数,但在讲到函数的效率时,不能不说它。 这两个函数可以说是最“傻”的。他们采用“遍历算法”,就是说,你给它多大范围,它就逐个把所有单元全部查一遍。所以他的查找次数是N
综上所述,由于N>N/2>LOG(N,2),所以LOOKUP函数以及VLOOKUP/HLOOKUP/MATCH的模糊查找效率是最高的,而几个函数的精确查找速度次之,SUMIF和COUNTIF最慢。 还有一个最影响速度的问题是易失函数。 易失函数包括:OFFSET,INDIRECT,TODAY,NOW,RAND,CELL,INFO等 只要在工作表中使用了这些函数,整个工作表就会不停地全部重算,是最影响速度的一类函数。 除了易失函数,还有一种是“易失性操作”:如自动筛选、单击或双击改变行高、列宽(不含手工改变)等,他们和易失函数一样,也会引发工作表的全部重算。
[此贴子已经被作者于2006-4-4 13:39:59编辑过] |