Excel - 如何通过分隔符列表拆分字符串

Excel - 如何通过分隔符列表拆分字符串

作为棋盘游戏记录工具的一部分,我希望能够拆分字符串。

该字符串可能由以下内容组成:

允许的字符:00、0、1、2、3、4、5、6、C、B、R。除 00 外,任何数字始终为个位数

如果出现 0 或 00,它将是整个字符串,所以我想在一般情况下可以忽略它,并使用更简单的 IF 子句单独处理

我想要的结果是:

图像:将 A1 中的字符串拆分为多个单元格

有什么方法可以使用 SUBSTITUTE 函数,并以某种方式提供分隔字符列表,而不是嵌套的 SUBSTITUTE 调用?

莫滕

答案1

我在回答时想到了一个解决方案(简单(叹气……))。我将其余部分留作进一步可行的示例,如果有人无法应用这个更简单的想法,它们可能会有所帮助:

=MID(A1, SEQUENCE(1,7), IF(SEQUENCE(1,7)<7, 1, LEN (A1)-6) )

它使用基本的“中间源 - 需要处理的字符数”方法,将最后一个字符限制为 7,因为您要提取 7 条数据。(否则,您会在 IK 列中得到“BB2”、“B2”和“2”,或者出现错误,具体取决于情况。)诀窍是,嗯,将 IN 保留为IF()-ing最后一个子句,而不是将整个方法建立在从 an 开始IF()并将所有内容放入其中的基础上!

当然,可以通过最后一个单元格(H1)进行修改,以增加其奇数。

“旧”答案:

如果您不介意使用旧式 CSE 公式,那么以下内容将重现您在问题中显示的结果:

{=IF( COLUMN()-1<7, MID(A1,COLUMN()-1,1), RIGHT(A1,LEN(A1)-6))}

Control-Shift-Enter(当然,花括号是通过按 实现的。)

当前的溢出方法无法像我以前那样在裸机中工作IF()。我没有找到一个函数来包装它,以便Spill在不改变结果的情况下强制执行该功能。

直接使用Spill技巧,我没能实现最后一个单元格“奇数出局”。

如果最后一个单元格不仅仅是超过六个字符的存储库,则需要进行相应的调整。您的问题中没有以任何方式解释这部分,因此...可以对COLUMN()生成的值进行调整以适合您最终实际使用的精确列,或者保持原样,就像所示的那样。

或者更好的是,可以使用该Spill功能填充前六列(B 到 G)的单元格,然后对 H 列使用不同的公式:

=MID(A1,SEQUENCE(1,6),1)

对于 BG 列,以及

=RIGHT(A1,LEN(A1)-6)

对于 H 列。

(它可以避免 CSE 方面的问题,CSE 将单元格与每行的公式锁定在一起,几乎与合并单元格一样。也许将来更容易维护,因为公式直接切中要点,而不是组合成一个执行两件不同事情的更大的公式。)

顺便说一句,MID()with为我们带来了SEQUENCE()一项很棒的新技术Spill。不必像这里一样是单个字符,可以是任意数量的字符。

相关内容