这里的关键点使任务变得困难 - 我们需要将字符串中的最后两个连字符用作分隔符,并保持所有其余部分不变。对于这种情况,ARRAY 公式是最好的选择。我的解决方案如下:
- 命名以 A1 开头的 6 列:字符串 | 最大"-" | 第二个最大值“-” | Str1 | STR2 | STR3
- 将您的值放在从 开始的 A 列中
A2
。
- B2 ( MAX "-" ): 键入公式
=MAX(IFERROR(SEARCH("-",$A2,ROW(INDIRECT("1:"&LEN($A2)))),0))
,但按CTRL+ SHIFT+ENTER而不是通常的ENTER- 这将定义一个 ARRAY 公式并在{}
其周围产生括号(但不要手动键入它们!)。
- C2 ( 2nd MAX "-" ): 输入公式
=MAX(IFERROR(SEARCH("-",$A2,ROW(INDIRECT("1:"&LEN($A2)))),0)*IF(IFERROR(SEARCH("-",$A2,ROW(INDIRECT("1:"&LEN($A2)))),0)=MAX(IFERROR(SEARCH("-",$A2,ROW(INDIRECT("1:"&LEN($A2)))),0)),0,1))
并再次按CTRL+ SHIFT+ ENTER。
因此,我们将获得字符串中最后两个连字符的位置。剩下的很简单——普通的 LEFT / MID / RIGHT 东西:
- D2:
=LEFT($A2,$C2-1)
, ENTER.
- E2:
=MID($A2,$C2+1,$B2-$C2-1)
, ENTER.
- F2:
=RIGHT($A2,LEN($A2)-$B2)
, ENTER.
- 自动填充
B:F
。
如果不需要临时列 B:C - 您应该在 D:F 中为 B:C 内容替换对它们的引用(即用 A2 实际公式替换$A2
)=LEFT($A2,
,但这将导致太复杂的 ARRAY 公式,仍然在做他们的工作 - 但是即使对于创作者来说,第二天也很难理解)
至于上述解决方案 - 也许它可能会被改进或简化,但我对这种ROW...INDIRECT
结构非常熟悉,因为我不得不分析兆字节的统计数据,所以对我来说,它就像创建 LEFT / RIGHT 一样容易。无论如何,它似乎工作。
为了您的方便,我共享了我的示例文件:https ://www.dropbox.com/s/p49x32t3a0igtby/StringHyphensSeparate.xlsx
希望对您有所帮助)
添加 - 2个更简化的解决方案来查找最后两个连字符(其余步骤与上述相同):
更简单的 ARRAY 公式:
- B2 ( MAX "-" ): 键入公式
=MAX(IF(MID($A2,ROW(INDIRECT("1:"&LEN($A2))),1)="-",ROW(INDIRECT("1:"&LEN($A2))),0))
,但按CTRL+ SHIFT+ENTER而不是通常的ENTER- 这将定义一个 ARRAY 公式并在{}
其周围产生括号(但不要手动键入它们!)。
- C2 ( 2nd MAX "-" ): 输入公式
=LARGE(IF(MID($A2,ROW(INDIRECT("1:"&LEN($A2))),1)="-",ROW(INDIRECT("1:"&LEN($A2))),0),2)
并再次按CTRL+ SHIFT+ ENTER。
SUBSTITUTE
使用函数的正则公式:
- B2(MAX“-”):输入公式
=SEARCH("@",SUBSTITUTE($A2,"-","@",LEN($A2)-LEN(SUBSTITUTE($A2,"-",""))))
,ENTER。
- C2 ( 2nd MAX "-" ): 输入公式
=SEARCH("@",SUBSTITUTE($A2,"-","@",LEN($A2)-LEN(SUBSTITUTE($A2,"-",""))-1))
, ENTER.
解决方案的关键SUBSTITUTE
是它可能仅替换某些匹配实例,即仅替换第 2 或第 3 个连字符。连字符的总数再次通过SUBSTITUTE
公式确定:原始字符串的长度减去所有连字符替换为空字符串的字符串长度:LEN($A2)-LEN(SUBSTITUTE($A2,"-","")
. 这里还有一个技巧 - 虽然我们应该保持原始字符串完好无损,但我们仍然可以对它做任何事情以获得中间解决方案!因此,我们将连字符替换为@
,然后@
在临时字符串中搜索。
以上所有解决方案都有效,请选择您喜欢/更好理解的解决方案。希望这也有助于理解数组公式,因为对于相同的任务有两种不同的方法。
我更新了示例文件以包含最后 2 个示例 + 生成的大型公式,没有中间步骤,链接相同且位于上方。祝你好运!