INDEX MATCH有个致命的BUG,你知道吗?

Excel数据分析思维、技术与实践

作者:dangdang

当当
HI,大家好,我是星光。之前我们分享了两个'BUG'....▼
VLOOKUP函数有个BUG,你——知道吗?
COUNTIF函数有个BUG,你——知道吗?
现在再分享第3个BUG...
……
“是谁说MATCH函数木有BUG的?给我出来!”
小A坐在电脑前咬牙切齿,她就想不明白了,学个函数为什么这么难,到处都是坑,三天两头撞BUG。VLOOKUP……算了,不提了……COUNTIF……算了,也不提了,往事不要再提,人生已多风雨……啊呸!
Excel交流群里,那个对男生鼻孔朝天对女生嘻嘻哈哈的高手姗姗来迟。
“肿么了?小A!”他问。
“是你说MATCH没有BUG的?可我有个数,INDEX+MATCH查不到,明明存在的一个数,就是查不到,不是BUG是什么?”
“不可能吧?你是不是又弄错数据类型了。小A,你可能不知道,MATCH函数和VLOOKUP函数一样,区分数据类型,文本数值和纯数值不匹配的。”
“谁说我不知道?我知道!我都失业了,还能不知道吗?不是这个问题,也不是空格什么的问题,这些错我都排查过了。这绝对是个BUG!”
“小A,你是不是弄错MATCH第3参数了?0才是精确匹配哦。”
“我又不傻,当然知道。”
“那你表格截图给我看下。”
“公式在B9单元格。”小A说。
高手想了下:“小A,是不是小数点后面有很多小数,只是没显示出来啊?”
“都显示了。0.204就是0.204,一个字不多,一个字也不少!”
“那你把文件发给我看下。”
高手打开文件一看,就傻眼了。D2单元格有个公式是=B2+C2,结果确实是0.204,用LEN函数测试了下,确实一个字不多,也一个字不少。
高手很困惑。他输入公式=D2=A9,结果竟然返回TRUE。这说明D2确实等于A9啊,可是为什么MATCH函数没找到呢?
“是不是BUG?你说是不是BUG?”小A愤愤的问。“我又不是皇阿玛,我怎么就天天见八阿哥呢??”
“我上个厕所,待会聊啊。”高手说。
十分钟……
二十分钟……
高手渺无音讯。
小A知道,高手这是尿遁了。
小A实在无奈,只好到EH论坛的函数版块发求助帖。该版块号称祖国大陆函数起源圣地,网址如下:http://club.excelhome.net/forum-3-1.html
等了大概十分钟,就收到一个网名叫“看见星光”的男生的答复了。
先说一下什么是浮点运算。
计算机是二进制,人类的数学是十进制。Excel在对数值进行运算的时候,不管是加减乘除还是乘幂,都需要先将十进制转换为二进制,计算完了,再转换成十进制呈现出来……换来换去,就产生了浮点运算。
不同函数对浮点的计算精度不同。等号和VLOOKUP等函数,只比对数值的15位精度,它们认为0.204和0.203+0.001是相等的,但MATCH函数的计算精度要高于等号,它就认为两者是不相等的,所以它的计算结果应该是错误值。
和MATCH函数相同情况的还有DELTA函数
=DELTA(0.204,0.203+0.001)
这条公式返回结果也为0,意思是两个值不相等。
……
……
“原来是这样呀,那我以后是不是就不能用MATCH函数了呀?”小A问。
“文本随意啊,含有复杂数学运算的,最好注意一下,尽量用ROUND函数修约后再使用。”
“有没有没有BUG的函数?”
“什么叫BUG啊?人家那叫个性,这年头,谁还没个性啊?别拿函数不当人看待,世间万物皆有灵性,女施主不要着相啊。”
小A无语以对。
……
……
(0)

相关推荐