我正在寻找一种从字符串中提取可变长度子字符串的方法。
我的细胞看起来会像这样:
ABC - DEF
ABCDE - DEF
ABCD - ABC
我想在字符处拆分字符串-
,因此单元格将变成:
ABC
ABCDE
ABCD
这应该用公式而不是 VBScript 来完成。
我正在使用 Excel 2010
编辑
我发现数据集并不总是包含字符-
,这意味着不应该有任何变化。
答案1
这个问题可以分解成两个步骤:
- 在字符串中找到所需拆分字符的索引(在本例中为
"-"
或" - "
)。 - 获取从原文开头到分割索引处的前缀子串。
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
。
答案2
根据您的编辑,扩展 Andrew 的答案:要找到要拆分的字符串,我们使用函数FIND
。如果FIND
无法找到给定的字符串,它将返回错误#VALUE?
。因此,我们需要检查此值并使用替代值。
为了检查包括在内的任何错误值#VALUE
,我们使用ISERROR
函数,因此:
=ISERROR(FIND(" - ", A1, 1))
FIND
如果函数在 A1 单元格中找不到“-”字符串,则结果为真。因此,我们使用它来决定使用哪个值:
=IF(ISERROR(FIND(" - ", A1, 1)), A1, MID(A1, 1, FIND(" - ", A1, 1)))
也就是说,如果 find 命令返回错误,则使用未修改的 A1 单元格。否则,执行MID
Andrew 已提供的功能。
答案3
感谢@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
...
答案4
以下公式将从中删除子字符串[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]),)