看似简单的一个简单的文本提取问题,稍不留心就会犯错误哦!

送人玫瑰,手有余香,请将文章分享给更多朋友

动手操作是熟练掌握EXCEL的最快捷途径!

文本处理问题是我们在使用EXCEL是经常会遇到的问题之一。有时候,看似非常简单的一个问题,稍不留心就会反错误。今天向大家介绍的就是这样的一个例子。

现在想把A列字符串最后面的汉字也就是各个区域提取出来放在B列,整体思路是这样的:只要定位到最后一个数字,找到这个数字在字符串中的位置后,就可以很轻松地提取相应的字符串了。

但是不要高兴的太早哦,一不小心,就会犯错误的!

01

如何定位呢?我们可以使用LOOKUP函数。

在单元格B2中输入公式“=RIGHT(A2,LEN(A2)-LOOKUP(0,-ISERROR(-MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)),ROW(INDIRECT("1:"&LEN(A2)))))”,并向下拖曳即可。

但是,这个公式是错误的,如上图,有几个单元格显示结果错误。问题出在哪里呢?

原来是LOOKUP函数在闹情绪了!因为对于LOOKUP函数而言,这里使用的是LOOKUP函数的数组形式,那么它要求对于第二个参数-ISERROR(-MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1))的结果要进行升序排列。数组中的值必须按升序排列:..., -2, -1, 0, 1, 2, ..., A-Z, FALSE, TRUE;否则,LOOKUP 可能无法返回正确的值。

原来是这样!一不小心就出错!

02

找到了出错的原因后,就很容易找的解决的方法了。

在单元格B2中输入公式“=RIGHT(A2,LEN(A2)-LOOKUP(1,0/(-MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)),ROW(INDIRECT("1:"&LEN(A2)))))”并向下拖曳即可。

稍等一下,这个公式还是有些问题!上图所示的三个单元格中又分别多了一个“0”,公式还需要雕琢一下!

为什么会多一个“0”呢?原来,问题出在0/(-MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1))这部分。使用MID函数依次提取单个字符并添加“-”将他们转换后,非零数字部分变为负值,文本部分变为错误值。字符串中最后一个“0”出现在数字部分的最后一个位置。如下图。

用“0”除他们后,最后一个“0”也会变为错误值。再用LOOKUP函数搜索“1”的时候,就会找到前一个数“5”所在的位置,所以最终提取字符串时就会多提取一位。

解决的方法也很简单,使用SUBSTITUTE函数将源数据中的数字字符“0”替换为任意的非零数字即可。

03

终于,我们得到了正确的公式和答案了。

在单元格B2中输入公式“=RIGHT(A2,LEN(A2)-LOOKUP(1,0/(-MID(SUBSTITUTE(A2,"0","1"),ROW(INDIRECT("1:"&LEN(A2))),1)),ROW(INDIRECT("1:"&LEN(A2)))))”并向下拖曳即可。

思路:

  • 利用MID函数来依次提取一个字符,提取的字符的数量取决于动态的ROW(INDIRECT("1:"&LEN(A2)))的值

  • 考虑到上面提到的会多一个“0”的问题,这里用SUBSTITUTE函数将源数据中的数字“0”替换为任意非零数字

  • 0/()部分将所有数字转换为“0”,在利用LOOKUP函数来定位到最后一位“0”所在的位置

  • 最后利用RIGHT函数配合LEN函数就可以提取到所需要的字符串了

到这里本文就结束了。小伙伴们如有任何问题可以私信我哦!

-END-

长按下方二维码关注EXCEL应用之家

面对EXCEL操作问题时不再迷茫无助

我就知道你“在看”

注意!前方有红包挡道!速点阅读原文消灭之!

推荐阅读
(0)

相关推荐