字符串在Excel中分隔

时间:2013-01-21 18:39:55

标签: excel

mozilla-nss-3.11.4-0.7

gdb-10.12-1.5.2

glibc-dcc-atv-1.0.3-10.6

我想在下一个B C D单元格中将它分开

mozilla-nss      3.11.4       0.7

gdb              10.12        1.5.2

glibc-dcc-atv    1.0.3        10.6

现在我可以使用左,右和找功能来做但不太好用

我用

LEFT(B33,FIND(".",B33)-2) =B cell

RIGHT(B33,FIND(".",B33))   =C Cell

RIGHT(D33,FIND("-",D33)-1)  = D Cell

回答不对,任何人都可以帮我纠正我的功能谢谢

2 个答案:

答案 0 :(得分:2)

这是一个不完美的解决方案:

  1. 进行搜索&替换以摆脱任何不是分隔符的破折号。例如,将“mozilla-nss”替换为“mozillanss”
  2. 将您的值放在A列开始的A列
  3. 在B1中,输入=LEFT(A1,FIND("-",A1)-1)
  4. 在C1中,输入=SUBSTITUTE(A1,B1,"")
  5. 在D1中,输入=SUBSTITUTE(LEFT(C1,FIND("-",C1,2)),"-","")
  6. 在E1中,输入=SUBSTITUTE(SUBSTITUTE(C1,D1,""),"-","")
  7. 在A栏中填写所有值的等式。
    修改:添加下一行:
  8. 将“mozillanss”替换为mozilla-nss“。
  9. 您的答案在B,D和E栏中。

答案 1 :(得分:2)

这里的关键点使得任务变得困难 - 我们需要在字符串中使用最后两个连字符作为分隔符,并保持其余部分完好无损。对于这种情况, ARRAY公式是最好的。我的解决方案如下:

  1. 名称从A1开始的6列:String | MAX“ - ”|第二个MAX“ - ”| Str1 | Str2 | STR3
  2. A2开始,将值放在A列中。
  3. B2( MAX“ - ”):输入公式=MAX(IFERROR(SEARCH("-",$A2,ROW(INDIRECT("1:"&LEN($A2)))),0)),但按 CTRL + SHIFT + ENTER 而不是通常的 ENTER - 这将定义一个ARRAY公式,并在其周围生成{}括号(但不要手动输入!)。
  4. C2(第二个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 + 输入
  5. 因此,我们将获得字符串中最后两个连字符的位置。剩下的很简单 - 普通的LEFT / MID / RIGHT东西:

    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
    5. 如果临时列B:C是不需要的 - 您应该在D:F中替换对B:C内容的引用(即用{A2}实际公式替换$A2中的=LEFT($A2,),但这将是导致TOO复杂的ARRAY公式,仍然在做他们的工作 - 但第二天很难理解,即使是创作者也是如此)

      至于上面的解决方案 - 也许它可能会得到改进或简化,但是我非常熟悉这种ROW...INDIRECT构造,因为我不得不分析兆字节的统计数据,所以对我来说它同样容易创建LEFT / RIGHT。无论如何,它似乎有效。

      为方便起见,我的示例文件已共享:https://www.dropbox.com/s/p49x32t3a0igtby/StringHyphensSeparate.xlsx

      希望这很有帮助)

      ADDITION - 找到最后两个连字符的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(第二个MAX“ - ”):输入公式=LARGE(IF(MID($A2,ROW(INDIRECT("1:"&LEN($A2))),1)="-",ROW(INDIRECT("1:"&LEN($A2))),0),2)并再次按 CTRL + SHIFT + 输入
      • 使用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解决方案的关键是它可能只替换匹配的某些实例,即仅替换第二个或第三个连字符。通过SUBSTITUTE公式再次确定连字符的总数:原始字符串的长度MINUS字符串的长度,所有连字符都替换为空字符串:LEN($A2)-LEN(SUBSTITUTE($A2,"-","")。 这里还有一个技巧 - 虽然我们应该保持原始字符串的完整性,但我们仍然可以为中间解决方案做任何事情!因此,我们用@替换连字符,然后在临时字符串中搜索@

      以上所有解决方案都有效,请选择您喜欢/更了解的内容。希望这也有助于理解数组公式,因为对于相同的任务,有两种不同的方法。

      我更新了示例文件以包含最后2个示例+生成的megaformulas没有中间步骤,链接是相同的并且位于上面。祝你好运!