Excel从字符串中提取子串
我正在寻找一种从字符串中提取可变长度子串的方法。
我的单元格看起来是这样的。
ABC - DEF
ABCDE - DEF
ABCD - ABC
我想在-字符处拆分字符串,所以单元格会变成:
ABC
ABCDE
ABCD
这应该用公式而不是VBScript来完成。
我使用的是Excel 2010
编辑
我发现数据集并不总是包含-字符,这意味着应该没有变化。
我正在寻找一种从字符串中提取可变长度子串的方法。
我的单元格看起来是这样的。
ABC - DEF
ABCDE - DEF
ABCD - ABC
我想在-字符处拆分字符串,所以单元格会变成:
ABC
ABCDE
ABCD
这应该用公式而不是VBScript来完成。
我使用的是Excel 2010
编辑
我发现数据集并不总是包含-字符,这意味着应该没有变化。
这个问题可以分解为两步。
1.在字符串中找到你想要的分割字符的索引(在本例中,"-"或" - ")。
2. 获取从原文开头到拆分索引的前缀子串。
FIND和SEARCH命令分别会返回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。
根据你的编辑对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函数。
下面的公式将从[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]),)
```。