2011-11-17 13:40:49 +0000 2011-11-17 13:40:49 +0000
22
22

Excel从字符串中提取子串

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

我的单元格看起来是这样的。

ABC - DEF
ABCDE - DEF
ABCD - ABC

我想在-字符处拆分字符串,所以单元格会变成:

ABC
ABCDE
ABCD

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

我使用的是Excel 2010

编辑

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

答案 (5)

26
26
26
2011-11-17 13:51:09 +0000

这个问题可以分解为两步。

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

FINDSEARCH命令分别会返回needle中给定haystack的索引(FIND是区分大小写的,SEARCH不区分大小写,允许使用通配符)。鉴于此,我们有

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

7
7
7
2011-11-17 15:22:44 +0000

根据你的编辑对Andrew的回答进行了扩展:为了找到要拆分的字符串,我们使用的是FIND函数。如果FIND未能定位到给出的字符串,就会返回#VALUE?错误。所以我们需要检查这个值,并使用一个替代值来代替。

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

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

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

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

这说明如果查找命令返回错误,就使用未修改的A1单元格。否则,就执行Andrew已经提供的MID函数。

2
2
2
2014-08-11 08:59:14 +0000

谢谢 @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
...
``` 如果你有: 

0x1&
1
1
1
2014-08-19 22:50:39 +0000

下面是一个非常简单的方法,在Excel中从文本串中提取左边的第5个字符。

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

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

就会产生字符串中左起的第5个字符,即E

0
0
0
2017-05-02 10:15:45 +0000

下面的公式将从[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]),)
```。