欢迎转发和点一下“在看”,文末留言互动! 置顶公众号或设为星标及时接收更新不迷路 小伙伴们好,今天来和大家分享一道数据提取并计算的题目。 原题是下面这个样子的: ![]() 严格意义上说,这也可以算是不规则的数据录入了。现实工作中经常会遇到类似的情况。如何来处理这道题目呢? 观察一下源数据,其实还是很有规律的。好了,可以请海鲜大法出场了! 01 FILTERXML函数法 ![]() 在单元格C3中输入下列公式,并向下拖曳即可。 =FILTERXML("<a>"&SUBSTITUTE(SUBSTITUTE(A$2,"(","<b>("),")",")</b>")&"</a>","a/b[position()="&ROW(A1)&"]") 这条公式中FILTERXML函数的书写和我们平时的写法稍有不同,但功能是完全一致的。 SUBSTITUTE(A$2,"(","<b>(") 利用SUBSTITUTE函数将左括号替换为“<b>(”。 SUBSTITUTE(SUBSTITUTE(A$2,"(","<b>("),")",")</b>") 同样将右括号替换为")</b>"。 "<a>"&SUBSTITUTE(SUBSTITUTE(A$2,"(","<b>("),")",")</b>")&"</a>" 这个结构的结果实际是这样的:"<a>5*8+<b>(56*1.2-25.2)</b>*<b>(1.5*2.5+2.5*1.5)</b>-<b>(56*98-4.5+1.2)</b>*0.5</a>",它实际上生成了3段在a节点下的b节点下的字符串。现在只要按照位置信息分别提取就可以了。 FILTERXML("<a>"&SUBSTITUTE(SUBSTITUTE(A$2,"(","<b>("),")",")</b>")&"</a>","a/b[position()="&ROW(A1)&"]") 提取b节点下的内容。这里第二参数中写了公式,随着向下拖曳,ROW(A1)依次增加,分别代表第1、2、3个位置。整个FILTERXML函数提取对应位置上的内容。 公式的计算结果这里就不再赘述了,使用名称及EVALUATE函数就可以了。 -END- |
|