鲜为人知但很有用的函数——filterxml
你好,我是刘卓。欢迎来到我的公号,excel函数解析。今天来分享一个冷门函数filterxml的用法,此函数的用法是由很多人(包括我)敬仰的海鲜老师所创。在我的心中,海鲜老师就是宝藏级别的存在。
filterxml这个函数在某些情况下是很有用的,我也是花了大半个月的时间才学到了一些基础用法,就来简单分享一下。
函数说明
FILTERXML函数使用指定的xpath从XML内容返回特定数据。有2个参数,语法如下:
FILTERXML(xml, xpath)
第1参数xml:是有效的xml格式的字符串。
第2参数xpath:是标准的xpath格式的字符串。
示例解释
<a>excel
<b>太难了</b>
</a>
因xml和xpath各自包含的内容非常多,所以今天我不想也不能讲很多,毕竟还是要看大家喜不喜欢,要不然白写了。
今天主要是想通过实例,让大家了解下filterxml可以干什么。如果你看完它的用法,觉得有用,想要继续学习,可以给文章点赞。我将根据点赞数决定是否更新它的详细用法。
1.像vlookup一样查找
=FILTERXML("<a "&TEXTJOIN({"='","' "},,A3:B11)&"'/>","//@"&E3)
2.一对多查找
=IFNA(IF(ROW(),FILTERXML("<a><b "&TEXTJOIN({"='","'/><b "},,A16:B27)&"'/></a>","//@"&D16)),"")
3.提取不重复值
=IFNA(IF(ROW(),FILTERXML("<a><b>"&TEXTJOIN("</b><b>",,A32:A43)&"</b></a>","a/b[not(preceding::*=.)]")),"")
4.分列
下图A、B两列是数据源,现要将B列的成员分列出来,结果如C、D、E列所示。在C48单元格输入下面的公式,右拉下拉。
=FILTERXML("<a><b>"&SUBSTITUTE($B48,"、","</b><b>")&"</b></a>","a/b["&COLUMN(A1)&"]")
5.提取成员姓名及最高分
提取成员姓名的公式为:在C56单元格输入下面的公式,下拉填充。
=FILTERXML("<a>"&SUBSTITUTE(SUBSTITUTE(B56,":","<b>"),"、","</b>、")&"</b></a>","a")
=FILTERXML("<a><b>"&SUBSTITUTE(SUBSTITUTE(B56,":","、"),"、","</b><b>")&"</b></a>","a/b[not(//b>.)][.*0=0]")