Excel 从字符串中提取子字符串

Excel 从字符串中提取子字符串

我正在寻找一种从字符串中提取可变长度子字符串的方法。

我的细胞看起来会像这样:

ABC - DEF
ABCDE - DEF
ABCD - ABC

我想在字符处拆分字符串-,因此单元格将变成:

ABC
ABCDE
ABCD

这应该用公式而不是 VBScript 来完成。

我正在使用 Excel 2010

编辑

我发现数据集并不总是包含字符-,这意味着不应该有任何变化。

答案1

这个问题可以分解成两个步骤:

  1. 在字符串中找到所需拆分字符的索引(在本例中为"-"" - ")。
  2. 获取从原文开头到分割索引处的前缀子串。

FIND和命令分别返回给SEARCH定的索引(区分大小写、不区分大小写并允许通配符)。鉴于此,我们有:needlehaystackFINDSEARCH

FIND(search_text, source_cell, start_index)

或者在这种情况下:

FIND(" - ", A1, 1)

一旦我们有了索引,我们就需要前缀来source_cell进行“拆分”。MID就是这样:

MID(source_cell, start_index, num_characters)

把它们放在一起,我们得到:

=MID(A1,1,FIND(" - ",A1,1))

其中 A1 有 的ABC - DEF文本ABC

答案2

根据您的编辑,扩展 Andrew 的答案:要找到要拆分的字符串,我们使用函数FIND。如果FIND无法找到给定的字符串,它将返回错误#VALUE?。因此,我们需要检查此值并使用替代值。

为了检查包括在内的任何错误值#VALUE,我们使用ISERROR函数,因此:

=ISERROR(FIND(" - ", A1, 1))

FIND如果函数在 A1 单元格中找不到“-”字符串,则结果为真。因此,我们使用它来决定使用哪个值:

=IF(ISERROR(FIND(" - ", A1, 1)), A1, MID(A1, 1, FIND(" - ", A1, 1)))

也就是说,如果 find 命令返回错误,则使用未修改的 A1 单元格。否则,执行MIDAndrew 已提供的功能。

答案3

感谢@AndrewColeson 的回答。

因此,只需补充一点,如果您想要右侧的所有内容-,请使用以下代码:

=MID(A1,LEN(B1)+3,LEN(A1))

即:

A1 = ABC - DEF
B1 = =MID(A1,1,FIND(" - ",A1,1))
    B1 = ABC
Therefore A1 = DEF

如果 后面有不确定数量的字符,那么此代码非常有用-

例如:

如果你有:

ABC - DEFG
AB - CDEFGH
...

答案4

以下公式将从中删除子字符串[TEXTCOLUMN_1]

例如:如果你想转换-./thumb/hello.jpg为,thumb/hello.jpg则使用以下公式

=SUBSTITUTE([TEXTCOLUMN_1],LEFT([TEXTCOLUMN_1],[NUM_OF_CHARACTERS]),)

[TEXTCOLUMN_1]= 您要更改的列名称 [NUM_OF_CHARACTERS]= 您要从左侧删除的字符数

如果要从右侧删除,请使用以下命令

=SUBSTITUTE([TEXTCOLUMN_1],RIGHT([TEXTCOLUMN_1],[NUM_OF_CHARACTERS]),)

相关内容