有条件地提取 Excel 中的部分文本

Extract part of text in Excel with condition

我知道这个问题似乎多余但找不到答案。我有一个文本字符串,例如:

A-B-C-D-E-F

我只想提取以“-”分隔的前 4 项。结果应该是

A-B-C-D

或者,我也希望只提取第 3 项:

C

我一直在尝试 MID 和 SEARCH 功能,但没有成功。 任何帮助将不胜感激。

使用 TEXTSPLIT(截至撰写本文时仅适用于 Office 365 Insider Beta 频道)

=TEXTJOIN("-",TRUE,INDEX(TEXTSPLIT(A1,"-"),1,{1,2,3,4}))

将第三个 {1,2,3,4} 更改为 3

如果没有 TEXTSPLIT 但有 TEXTJOIN 并且在 PC 上,则:

=TEXTJOIN("-",TRUE,INDEX(FILTERXML("<a><b>"&SUBSTITUTE(A1,"-","</b><b>")&"</b></a>","//b"),1,{1,2,3,4}))

如果没有 TEXTJOIN,它将需要 vba。就像这个模仿 TEXTJOIN 的 UDF:

所以,这就是我 尝试过的,

• 单元格 B1

中使用的公式
=TEXTJOIN("-",,TAKE(TEXTSPLIT(A1,"-"),,4))

• 单元格 D1

中使用的公式
=TEXTJOIN("-",,DROP(TEXTSPLIT(A1,"-"),,-2))

• 单元格 C1

中使用的公式
=TEXTJOIN("-",,INDEX(TEXTSPLIT(A1,"-"),,3))

注意: 上面显示的公式适用于 O365 用户,仅限 Insiders Beta 频道 用户!


但是,如果您可以访问 Excel 2019,则可以使用 TEXTJOIN()CONCAT()

• 单元格 B9

中使用的公式
=SUBSTITUTE(CONCAT("-"&INDEX(FILTERXML("<t><s>"&SUBSTITUTE(A9,"-","</s><s>")&"</s></t>","//s"),ROW(A1:A4))),"-","",1)

• 单元格 C9

中使用的公式
=SUBSTITUTE(CONCAT("-"&INDEX(FILTERXML("<t><s>"&SUBSTITUTE(A9,"-","</s><s>")&"</s></t>","//s"),3)),"-","",1)

由于 OP 在评论中提到,OP 在 MAC 中使用 O365,因此这里有一个更新。

• 单元格 B1

中使用的公式
=TEXTJOIN("-",,TRIM(MID(SUBSTITUTE(A1,"-",REPT(" ",100)),COLUMN(A1:D1)*99-98,99)))

• 单元格 C1

中使用的公式
=TRIM(MID(SUBSTITUTE(A1,"-",REPT(" ",100)),COLUMN(C1)*99-98,99))

或者,

• 单元格 D1

中使用的公式
=TRIM(MID(SUBSTITUTE(A1,"-",REPT(" ",100)),200,100))

对于 Excel MAC 和更早的版本:

提取前四个:

=LEFT(A1,FIND(CHAR(1),SUBSTITUTE(A1,"-",CHAR(1),4))-1)

提取第三个:

=MID(A1,FIND(CHAR(1),SUBSTITUTE(A1,"-",CHAR(1),2))+1, FIND(CHAR(1),SUBSTITUTE(A1,"-",CHAR(1),3))-FIND(CHAR(1),SUBSTITUTE(A1,"-",CHAR(1),2))-1)