我用offset在一张数据透视表中定位并通过查找函数返回不同项目对应的值.由于所有项目的值均在一张数据透视表中,因此我使用countif来返回针对每个项目在vlookup中所查找的行数范围.由于数据量较大导致速度处理很慢,请问有无办法解决?谢谢!
我记得在实战技巧精粹中说countif是易失函数,也许我记错了?
没有记错!
关于Sumif、Countif是否易失性函数,在《精粹》读者版有勘误,有待进一步讨论。
但总归来说,这两个函数是高能低效的函数,主要与其“遍历”式计算方法有关,并非与其易失性有关。
具体你的附件没传,无从得知你是否因为Countif导致慢速。更无从得知是否有必要用Countif。
首先,COUNTIF()不是易失函数。
易失函数的基本特征是:打开包含易失函数的工作簿,不做任何改动,立即关闭,会提示“是否保存修改”
比如,在一个工作簿中写个公式=RAND(),保存,关闭,再打开,不做任何改动,立即关闭,会提示“是否保存修改”——这说明,RAND()是易失函数
但,COUNTIF()不会这样。
其次,COUNIF()函数是否能用其他的函数来代替,要看具体情况。有些代替是好的,速度会快于COUNTIF,有些速度可能更慢;还有一些是根本无法代替的。
一般的公认SUMIF()因为其第3个参数简写时的不确定性,也认为是半易失性函数(或工作簿级易失性函数) 但我在实际运用时发觉SUMIF()和COUNTIF()也会因其它任意单元格的变动而重算,我个人认为也应该算是易失性函数,但只是我个人主观想法,不能做数。必经判定易失性函数的标准是“打开一个工作薄但不做任何更改就关闭时,是否要保存” 。
countif虽然不是易失函数,但是其引用外部工作簿的时候,如果外部工作簿没有打开,则无法返回正确的结果。类似的函数有countif , countifs , indirect , sumif , sumifs , offset . 这类函数有一个共性就是它们的参数引用只能是“区域”,而不可以是“数组”。就是说其参数必须指向工作表里面的具体单元格,不能是内存数组。
|