string在Excel中分开
mozilla-nss-3.11.4-0.7 gdb-10.12-1.5.2 glibc-dcc-atv-1.0.3-10.6
我想在下一个BCD单元中分开它
mozilla-nss 3.11.4 0.7 gdb 10.12 1.5.2 glibc-dcc-atv 1.0.3 10.6
现在我可以使用左,右,findfunction,但不是很好
我用
LEFT(B33,FIND(".",B33)-2) =B cell RIGHT(B33,FIND(".",B33)) =C Cell RIGHT(D33,FIND("-",D33)-1) = D Cell
答案不正确任何人都可以帮我纠正我的function谢谢
这里的关键是使任务困难 – 我们需要在string中使用最后两个连字符作为分隔符,并保持所有其余的完整。 对于这种情况ARRAY公式是最好的拍摄。 我的解决scheme如下:
- 名称6列开始A1:String | MAX“ – ”| 2nd MAX“ – ”| Str1 | Str2 | STR3
- 把你的值从
A2
开始放在A2
列。 - B2( MAX“ – ” ):键入公式
=MAX(IFERROR(SEARCH("-",$A2,ROW(INDIRECT("1:"&LEN($A2)))),0))
but Ctrl + Shift + ENTER而不是通常的ENTER – 这将定义一个ARRAY公式,并会在{}
括号内(但不要手动input)。 - C2( 2nd MAX“ – ” ):input公式
=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 。
因此,我们将获得string中最后两个连字符的位置。 其余的很容易 – 普通的左/中/右的东西:
- 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中replace它们对B:C内容的引用(即用A2的实际公式代替$A2
in =LEFT($A2,
),但是这会导致TOO复杂的ARRAY公式,仍然在做他们的工作 – 但很难明白,即使是创作者的第二天)
至于上面的解决scheme – 也许它可能会改进或简化,但我很熟悉这种ROW...INDIRECT
结构的时代,我不得不分析兆字节的统计数据,所以对我来说,就像创buildLEFT一样简单/ 对。 无论如何,这似乎工作。
为了您的方便,我的示例文件是共享的: https : //www.dropbox.com/s/p49x32t3a0igtby/StringHyphensSeparate.xlsx
希望有帮助)
附加 – 2个更简化的解决scheme来查找最后两个连字符 (其余的步骤与上面相同):
-
更简单的ARRAY公式:
- B2( MAX“ – ” ):input公式
=MAX(IF(MID($A2,ROW(INDIRECT("1:"&LEN($A2))),1)="-",ROW(INDIRECT("1:"&LEN($A2))),0))
但按CTRL + SHIFT + ENTER而不是通常的ENTER – 这将定义一个ARRAY公式,并将导致{}
括号括起来(但不要手动input)。 - C2( 2nd MAX“ – ” ):input公式
=LARGE(IF(MID($A2,ROW(INDIRECT("1:"&LEN($A2))),1)="-",ROW(INDIRECT("1:"&LEN($A2))),0),2)
并再次按下CTRL + SHIFT + ENTER 。
- B2( MAX“ – ” ):input公式
-
使用
SUBSTITUTE
函数的正则expression式:- B2( MAX“ – ” ):input公式
=SEARCH("@",SUBSTITUTE($A2,"-","@",LEN($A2)-LEN(SUBSTITUTE($A2,"-",""))))
, ENTER 。 - C2( 2nd MAX“ – ” ):input公式
=SEARCH("@",SUBSTITUTE($A2,"-","@",LEN($A2)-LEN(SUBSTITUTE($A2,"-",""))-1))
, ENTER 。
- B2( MAX“ – ” ):input公式
SUBSTITUTE
解决scheme的关键在于它可能仅replace某些匹配的实例 ,即仅replace第2或第3个连字符。 连字号的总数再次通过SUBSTITUTE
公式确定:原始string的长度MINUS将string全部replace为空string的长度: LEN($A2)-LEN(SUBSTITUTE($A2,"-","")
。更多的技巧 – 虽然我们应该保持原始string不变,但是我们仍然可以用中间解决scheme做任何事情!因此,我们用@
代替连字符,然后在临时string中search@
。
以上所有的解决scheme都在工作,select你喜欢/理解更好。 希望这也将有助于理解数组公式,因为对于相同的任务有两种不同的方法。
我更新了示例文件,包括最后2个示例+生成的megaformulas没有中间步骤,链接是相同的,位于上面。 祝你好运!
这是一个不完美的解决scheme:
- 做一个search和replace来摆脱任何不是分隔符的破折号。 例如,将“mozilla-nss”replace为“mozillanss”
- 把你的值从A1开始
- 在B1中input
=LEFT(A1,FIND("-",A1)-1)
- 在C1中input
=SUBSTITUTE(A1,B1,"")
- 在D1中,input
=SUBSTITUTE(LEFT(C1,FIND("-",C1,2)),"-","")
- 在E1中,input
=SUBSTITUTE(SUBSTITUTE(C1,D1,""),"-","")
- 在列A中填写所有值的方程式
编辑:添加下一行: - 将“mozillanss”replace为“mozilla-nss”。
你的答案在B,D和E列