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]),)
```。