在 Excel 中提取两组重复值之间的文本

在 Excel 中提取两组重复值之间的文本

我的活动名称符合以下结构:

[Network] - [Language] - [Country] - [Channel] - [Campaign Type] - [Free Text]

这可能看起来像:

Google - English - India - Display - Discovery - Test A

我需要的是 excel 或 google 表格中的一个公式,它可以帮助我提取我想要的任何值。例如,我将下载原始数据并添加两列,一列提取语言,另一列提取国家/地区。

我设法拼凑了这个公式(如果活动名称在 D2 列),它可以给我语言,但我不确定如何调整它以移动到字符串的下一个值:

=iferror(MID($D2,SEARCH(" - ",$D2,SEARCH($D2,$D2,1))+3,SEARCH(" - ",$D2,SEARCH(" - ",$D2,SEARCH($D2,$D2,1))+3)-(SEARCH(" - ",$D2,SEARCH($D2,$D2,1))+3)),"")

先感谢您!

答案1

如果您有 Windows Excel 2013+,您可以使用该FILTERXML函数

  • 从字符串创建 xml:

     ="<t><s>" & SUBSTITUTE(D2," - ","</s><s>") & "</s></t>"
    
  • 然后构造一个 xPath 来返回您想要的编号项目

因此,要提取语言项,您可以使用:

=FILTERXML("<t><s>" & SUBSTITUTE(D2," - ","</s><s>") & "</s></t>","//s[2] ")

要提取下一个项目,请将 [2] 更改为 [3]。

要提取第一、第三和第五个项目作为数组,可以使用:

=FILTERXML("<t><s>" & SUBSTITUTE(D2," - ","</s><s>") & "</s></t>","//s[position()=1 or position()=3 or position()=5]")

各种变化取决于您到底想做什么。

  • 每个奇数节点:

     "//s[position() mod 2 = 1]")
    
  • 每个偶数节点

    "//s[position() mod 2 = 0]")
    
  • 最后 2 个节点

    "//s[position() >= last()-1]"
    
  • 所有节点分别放在一个数组中:

     "//s" 
    

如果您没有该FILTERXML功能,还有其他方法可以实现此目的,但您需要告诉我们 Excel 的版本。

相关内容