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如下:

  1. 名称6列开始A1:String | MAX“ – ”| 2nd MAX“ – ”| Str1 | Str2 | STR3
  2. 把你的值从A2开始放在A2列。
  3. B2( MAX“ – ” ):键入公式=MAX(IFERROR(SEARCH("-",$A2,ROW(INDIRECT("1:"&LEN($A2)))),0)) but Ctrl + Shift + ENTER而不是通常的ENTER – 这将定义一个ARRAY公式,并会在{}括号内(但不要手动input)。
  4. 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中最后两个连字符的位置。 其余的很容易 – 普通的左/中/右的东西:

  1. D2: =LEFT($A2,$C2-1)ENTER
  2. E2: =MID($A2,$C2+1,$B2-$C2-1)ENTER
  3. F2: =RIGHT($A2,LEN($A2)-$B2)ENTER
  4. 自动填充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
  • 使用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

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:

  1. 做一个search和replace来摆脱任何不是分隔符的破折号。 例如,将“mozilla-nss”replace为“mozillanss”
  2. 把你的值从A1开始
  3. 在B1中input=LEFT(A1,FIND("-",A1)-1)
  4. 在C1中input=SUBSTITUTE(A1,B1,"")
  5. 在D1中,input=SUBSTITUTE(LEFT(C1,FIND("-",C1,2)),"-","")
  6. 在E1中,input=SUBSTITUTE(SUBSTITUTE(C1,D1,""),"-","")
  7. 在列A中填写所有值的方程式
    编辑:添加下一行:
  8. 将“mozillanss”replace为“mozilla-nss”。

你的答案在B,D和E列