楼主 xyh9999 |
我们知道用MATCH(lookup_value,lookup_array,match_type)可以返回lookup_value在lookup_array中的位置(或近似位置),我个人认为基本可以用CountIf函数来替代Match函数的绝大部分功能,并且很多地方可以超越Match函数。 我认为,当lookup_value是一个确定的值时,我鼓励大家用CountIf(lookup_array,">=" & lookup_value)或CountIf(lookup_array,">" & lookup_value)+1来代替MATCH(lookup_value,lookup_array,-1),我还鼓励大家用CountIf(lookup_array,"<=" & lookup_value)或CountIf(lookup_array,"<" & lookup_value)+1来代替MATCH(lookup_value,lookup_array,1)。 因为我们知道使用MATCH(lookup_value,lookup_array,match_type)函数时,当参数match_type为1或-1时,都要求lookup_array是按一定规则排过序的,而用CountIf去代替是没有这个要求的! 当使用MATCH(lookup_value,lookup_array,match_type)函数时,若match_type=0时,我还是建议用MATCH函数的,当然也可以用If(CountIf(lookup_array,"=" & lookup_value),CountIf(lookup_array,"<=" & lookup_value))或If(CountIf(lookup_array,"=" & lookup_value),CountIf(lookup_array,"<" & lookup_value)+1)来升序排序的位置,用If(CountIf(lookup_array,"=" & lookup_value),CountIf(lookup_array,">=" & lookup_value))或If(CountIf(lookup_array,"=" & lookup_value),CountIf(lookup_array,">" & lookup_value)+1)来降序排序的位置。好象用CountIf也显得要灵活些。 以上仅代表个人观点,错误难免,请指出。供大家参考、讨论。 顺便说一句,类似的工作表函数功能可相互替换且优于原函数的应不止这一组,请众多高手不啬出手! |
2楼 gouweicao78 |
谢谢分享观点。 关于COUNTIF和MATCH函数:COUNTIF函数采用“遍历”算法,因此当数据量大时,效率就低。 MATCH函数的第3参数为1, 升序查找,采用与LOOKUP函数相似的“二分法”算法; MATCH函数的第3参数为0,精确匹配碴场,采用“从头开始逐个查找,找到即停”的算法; MATCH函数的第3参数为-1,降序查找,应该类似于升序查找。 因此,MATCH函数算是一个高效率的函数。 但不管如何:只有用合适的函数做合适的事情,才是“实用为王”。再高效,如果不能实现功能或者需要费很大周折才能实现的,那也白搭,呵呵。 |
3楼 liuguansky |
COUNTIF对文本型数字的处理也是一个不容忽视的问题。 |
4楼 weikang2516 |
各位高手真是老生常谈啊,学习学习 |
5楼 poiuyman5 |
fantastics |
6楼 poiuyman5 |
fantastics |