欢迎转发和点一下“在看”,文末留言互动!
置顶公众号或设为星标及时接收更新不迷路
小伙伴们好,今天来和大家分享一道文本题目。通过这道题目,再次和大家复习一下FILTERXML函数第二参数中条件设置的技巧。
题目是这样子的:
按题目要求,将A列中的卡号信息、消费日期和金额分别列在3列中。今天这道题目,向大家介绍3种方法来提取数值。
01
VLOOKUP函数法
我们观察一下源数据,它们的排列是有规律的。
在单元格D10中输入下列公式,三键回车并向下向右拖曳即可。
=TRIM(VLOOKUP(" *",RIGHTB(INDEX($A$2:$A$19,(ROW(A1)-1)*3+COLUMN(A1)),ROW($1:$20)),1,))
下面我们一起看看这条公式的详细解析。
(ROW(A1)-1)*3+COLUMN(A1)
源数据是3行一组,因此这部分确保能够提取到正确的数据类型。
例如当前单元格在D10时,(ROW(A1)-1)*3+COLUMN(A1)的值是1,INDEX函数返回卡号那行的信息;当向下拖曳公式到第11行时,(ROW(A2)-1)*3+COLUMN(A1)的值是4,同样也返回卡号信息。
RIGHTB(INDEX($A$2:$A$19,(ROW(A1)-1)*3+COLUMN(A1)),ROW($1:$20))
利用RIGHTB函数,从右向左依次提取长度为1、2、3..20个字节的字符串。
VLOOKUP(" *",RIGHTB(INDEX($A$2:$A$19,(ROW(A1)-1)*3+COLUMN(A1)),ROW($1:$20)),1,)
由于源数据中的分隔符“:”是全角字符,是2个字节长度,因此上面RIGHTB函数提取的结果中肯定会有“ ”+字符串这样结构的字符串,因此可以利用VLOOKUP函数可以使用通配符的特点,查找以空格为开头的字符串。
TRIM(VLOOKUP(" *",RIGHTB(INDEX($A$2:$A$19,(ROW(A1)-1)*3+COLUMN(A1)),ROW($1:$20)),1,))
找到后去除多余的空格,就是本题的答案了。
02
海鲜大法
使用海鲜大法时我们需要添加一列辅助列。在单元格区域B2:B18中事先输入“:”。
在单元格D10中输入下列公式,三键回车并向下向右拖曳即可。
=FILTERXML("<a><b>"&SUBSTITUTE(PHONETIC($A$2:$B$19),":","</b><b>")&"</b></a>","a/b["&2*((ROW(A1)-1)*3+COLUMN()-3)&"]")
接单介绍一下这条公式。
PHONETIC($A$2:$B$19)
PHONETIC函数这部分,是把源数据和辅助列中的“:”合并在一起,生成一个以“:”作为所有数据的分隔符的新的源数据。
SUBSTITUTE(PHONETIC($A$2:$B$19),":","</b><b>")
利用SUBSTITUTE函数将“:”替换为“</b><b>”。
FILTERXML("<a><b>"&SUBSTITUTE(PHONETIC($A$2:$B$19),":","</b><b>")&"</b></a>","a/b["&2*((ROW(A1)-1)*3+COLUMN()-3)&"]")
在左右两端分别添加“<a><b>”和“</b></a>”,以满足FILTERXML函数对数据格式的要求。
在FILTERXML函数的第二参数中如下输入:"a/b["&2*((ROW(A1)-1)*3+COLUMN()-3)&"]",它的作用和上面那个例子中(ROW(A1)-1)*3+COLUMN(A1)是相同的。
03
高版本函数
最后,如果你能使用高版本函数,那么这道题目可以这样写。
本期内容练习文件提取方式:
链接:https://pan.baidu.com/s/1NSrwmIMz8lxW71o9k_4k3Q?pwd=vl5e
提取码:vl5e
-END-
长按下方二维码关注EXCEL应用之家
面对EXCEL操作问题时不再迷茫无助
我就知道你“在看”