将string中的文本两个字提取到分隔符值的左边

这个问题不是以前发布的Excel问题的重复,而是这个问题正在寻求提取分隔符左侧的单词; 而之前发布的问题将词语提取到分隔符右侧。

使用MS Excel,我想在分隔符值“^”的左边提取两个单词(三个空格),包括提取带有/附加分隔符“^”的标识符单词

示例:单元格A2

约翰尼和我打算去看电影看蝙蝠侠归来,但是到了晚了。

结果:细胞B2

去看^蝙蝠侠

可能有一些更好的解决scheme,但这里是我有:

=MID(LEFT(A1,FIND(" ",A1;FIND("^",A1))-1),FIND("^",SUBSTITUTE(A1," ","^",LEN(LEFT(A1,FIND("^",A1)))-LEN(SUBSTITUTE(LEFT(A1,FIND("^",A1))," ",""))-2))+1,9999) 

核心是: LEN(LEFT(A1,FIND("^",A1)))-LEN(SUBSTITUTE(LEFT(A1,FIND("^",A1))," ",""))
它计算从string开始直到你的分隔符的空间,然后用anoter分隔符replacecount - 2空格#以find你的开始FIND("^",SUBSTITUTE(A1," ","^",LEN(...)-LEN(...)-2))+1这样做一个string结束较早LEFT(A1,FIND(" ",A1;FIND("^",A1))-1) (你不需要做长期第二次)

一个非VBA公式的方法是可能的(可能作为一个数组公式),但会像用黄油刀做雕塑。 这是一个可以用作UDF的VBA函数:

 Function ExtractLeft(str As String, delim As String, words As Long) As String Dim i As Long, n As Long Dim A As Variant Dim left_words As String, right_word As String A = Split(str, delim) right_word = A(1) right_word = Split(right_word)(0) right_word = delim & right_word left_words = A(0) A = Split(Trim(left_words)) n = UBound(A) For i = n To n - words + 1 Step -1 right_word = A(i) & " " & right_word Next i ExtractLeft = right_word End Function 

VBA方法的优点是可以轻松地更改分隔符和要提取的单词数量:

在这里输入图像说明