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


22

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

我的细胞看起来像:

ABC - DEF
ABCDE - DEF
ABCD - ABC

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

ABC
ABCDE
ABCD

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

我正在使用Excel 2010

编辑

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

Answers:


26

此问题可以分为两个步骤:

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

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

FIND(search_text, source_cell, start_index)

或在这种情况下:

FIND(" - ", A1, 1)

一旦有了索引,就需要前缀source_cell“ split”。MID只是这样做:

MID(source_cell, start_index, num_characters)

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

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

与A1的ABC - DEF给予文本ABC


7

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

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

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

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

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

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


2

谢谢@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
...

这也可以在=MID(a1,FIND("-",a1)+1,LEN(a1))没有任何“细胞外”引用的情况下完成)
Mikey

1

这是从Excel文本字符串的左侧提取第5个字符的非常简单的方法:

假设字符串ABCDEFGHIJ存储在Excel电子表格的单元格A1中,则下面的公式

=RIGHT(LEFT(A1,5),1)

从字符串的左边产生第5个字符,即E


MIDExcel中没有函数吗?我确定它存在于旧版Visual Basic中,并且类似=MID(A1, 5, 1)
Valmiky Arquissandas 2014年

0

以下公式将从中删除子字符串 [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]),)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.