从 Excel 中的字符串中提取子字符串(否 VBA)

Extract Sub-String from String in Excel (No VBA)

我在 excel 中有一系列遵循以下模式的路径:

C:\Folder\Subfolder1\SURNAME, Firstname\Subfolder2\SURNAME, Firstname - YYYY MM DD - Invoice.pdf

我无法使用 VBA,因此使用数组公式,我将如何提取 SURNAME、Firstname?

使用 A​​1 中的数据,在 B1 中输入:

=LEFT(RIGHT(A1,LEN(A1)-FIND("@",SUBSTITUTE(A1,"\","@",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))),1)),FIND("-",RIGHT(A1,LEN(A1)-FIND("@",SUBSTITUTE(A1,"\","@",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))),1)))-2)

或者试试,

B1中向右复制直到空白并全部向下复制:

=TRIM(MID(SUBSTITUTE("\"&MID($A1,FIND("\",$A1,4)+1,FIND("-",$A1,4)-FIND("\",$A1,4)-2),"\",REPT(" ",199)),COLUMN(A1)*399,199))

您可以使用:

=TRIM(MID(SUBSTITUTE(A1,"\",REPT(" ",LEN(A1))),3*LEN(A1)+1,LEN(A1)))

其中 3* 可以读作 n-1,因此更改为任何数字以从分隔字符串中获取第 n 个子字符串。

另一个选项,可以访问 FILTERXML:

=FILTERXML("<t><s>"&SUBSTITUTE(A1,"\","</s><s>")&"</s></t>","//s[position()=4]")

这实际上是从“\”分隔的字符串中提取第 4 个子字符串。如果您想检索其他子字符串,请将 position()=4 更改为 nth 位置。这个选项看起来有点长,但是当你想要检索多个子字符串时,你只需要更改 XPATH.

就会变得很方便

经过你的推荐,我想你可能想试试:

=FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(A6," - ","\"),"\","</s><s>")&"</s></t>","//s[position()=last()-2]")