欢迎转发和点一下“在看”,文末留言互动!
置顶公众号或设为星标及时接收更新不迷路
小伙伴们好,今天来和大家分享一道文本题目。通过我们都很熟悉的一个函数,提供给大家一个新颖的解题思路。
原题目是这样子的:
原来是要从文本字符串中提取数字。这个类型的题目我们做过很多,最基本的解题思路就是首先定位到需要提取的数字,确定其长度,最后提取。
但是如果打开思路,利用MATCH函数返回某一数据在数组中的相对位置这一特点,我们同样也能够很轻盈地解决这道题目。
01
常规思路的解法
在单元格C2中输入下列公式,三键回车并向下拖曳即可。
=MIDB(MID(A2,MIN(FIND(ROW($1:$10)-1,A2&1/17))+3,100),SEARCHB("?",MID(A2,MIN(FIND(ROW($1:$10)-1,A2&1/17))+3,100)),3)
下面来详细解析一下这条公式。
FIND(ROW($1:$10)-1,A2&1/17)
FIND(ROW($1:$10)-1,A2&1/17)部分,查找0-9这十个数字在字符串A2&1/17中的位置。A2&1/17这样做是因为1/17中包含了全部0-9这十个数字,可以确保FIND函数能够找得到每一个数字。
MIN(FIND(ROW($1:$10)-1,A2&1/17))
利用MIN函数提取出最小值,也就是位置在最左侧的那个数字的位置。
MID(A2,MIN(FIND(ROW($1:$10)-1,A2&1/17))+3,100)
MID函数提取字符串中第一个数值后面的所有字符串。这样,提取出来的字符串中就仅仅只包含所希望提取的数字了。
在源数据中,位置靠左的数值都是两位数的,因此MIN函数的结果再加上3,完美地避开了第一个数值。
SEARCHB("?",MID(A2,MIN(FIND(ROW($1:$10)-1,A2&1/17))+3,100))
这部分,在新生成的字符串中查找第一个数字的位置。这是一个常用技巧。
MIDB(MID(A2,MIN(FIND(ROW($1:$10)-1,A2&1/17))+3,100),SEARCHB("?",MID(A2,MIN(FIND(ROW($1:$10)-1,A2&1/17))+3,100)),3)
最后,利用MIDB函数提取目标数字。
注意,第三行中的目标数字是10,但是MIDB函数的第三参数是3,却依然能够正确提取。原因就是10后面跟的“元”是一个双字节字符,而MIDB函数是按字节提取的,它只能返回10和一个空格。正常情况下,是需要在最外侧嵌套一个TRIM函数来去除空格的。
02
MATCH函数的妙用
在单元格C2中输入下列公式,三键回车并向下拖曳即可。
=MATCH(12,FIND(ROW($1:$500)&"元",A2))
这个公式来的风轻云淡,十分的写意!
FIND(ROW($1:$500)&"元",A2)
FIND函数部分,利用ROW($1:$500)&"元"组合在源数据中查找生成的500个字符串的位置,并返回一个内存数组,500行1列的一个内存数组。
MATCH(12,FIND(ROW($1:$500)&"元",A2))
MATCH函数,省略第二参数,查找小于等于被查找值的最大值的位置。这里MATCH函数的第一参数“12”可以替换成任意大于等于12的数字,原因是,目标查找值的最大位置是12。或者你也可以直接写一个极大值也行。
本期内容练习文件提取方式:
链接:https://pan.baidu.com/s/12zeU4yuwKXcoakj78gN_vg?pwd=jzu3
提取码:jzu3
-END-
长按下方二维码关注EXCEL应用之家
面对EXCEL操作问题时不再迷茫无助
我就知道你“在看”