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

Pie*_*erk 22 extract string microsoft-excel

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

我的细胞看起来像:

ABC - DEF
ABCDE - DEF
ABCD - ABC
Run Code Online (Sandbox Code Playgroud)

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

ABC
ABCDE
ABCD
Run Code Online (Sandbox Code Playgroud)

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

我正在使用 Excel 2010

编辑

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

And*_*son 26

这个问题可以分为两步:

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

FINDSEARCH命令每个将返回的一个给定的索引needlehaystackFIND是大小写敏感的,SEARCH是不区分大小写的,并允许通配符)。鉴于此,我们有:

FIND(search_text, source_cell, start_index)
Run Code Online (Sandbox Code Playgroud)

或者在这种情况下:

FIND(" - ", A1, 1)
Run Code Online (Sandbox Code Playgroud)

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

MID(source_cell, start_index, num_characters)
Run Code Online (Sandbox Code Playgroud)

把它们放在一起,我们有:

=MID(A1,1,FIND(" - ",A1,1))
Run Code Online (Sandbox Code Playgroud)

A1 的文本为ABC - DEFgive ABC


Hel*_*ion 7

根据您的编辑扩展安德鲁的答案:要找到要拆分的字符串,我们正在使用该FIND函数。如果FIND无法定位给定的字符串,则返回#VALUE?错误。所以我们需要检查这个值并使用替代值。

要检查任何错误值,包括#VALUE,我们使用该ISERROR函数,因此:

=ISERROR(FIND(" - ", A1, 1))
Run Code Online (Sandbox Code Playgroud)

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

=IF(ISERROR(FIND(" - ", A1, 1)), A1, MID(A1, 1, FIND(" - ", A1, 1)))
Run Code Online (Sandbox Code Playgroud)

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