2012-12-05 102 views
3

我有一个像这样的字符串的excel列:ABC-1234-GLK-1234-10TH8E10-21 71-D 我需要给变量赋值GL-1234(子字符串在第二短跑和第四次之间)。我试图VBA某些字符串的部分

x=Mid(string, 10, 8)

但问题是,并非所有的字符串的长度相同,但唯一不变的是,我想要的是子第2和第4个破折号之间。

任何想法?

+4

您可以用'InStr'找到短线的位置。 – Jacob

+0

谢谢!!!!这正是我需要的! :) p.s. VBA中的新功能 – Maggie11

+0

[如何获取某个字符串的特定部分]的可能重复(http://stackoverflow.com/questions/2543225/how-to-get-a-particular-part-of-a-string) – puzzlepiece87

回答

1

你可以尝试以下方法,但我不认为这是最优雅的或最简单的解决方案:

x = "" 
p1 = InStr(1, string, "-") 
If p1 <> 0 Then 
    p2 = InStr(1 + p1, string, "-") 
    If p2 <> 0 Then 
     p3 = InStr(1 + p2, string, "-") 
     If p3 <> 0 Then 
      p4 = InStr(1 + p3, string, "-") 
      If p4 <> 0 Then 
       x = Mid(string, p2 + 1, p4 - p2 - 1) 
      End If 
     End If 
    End If 
End If 
+1

一个更通用的解决方案(即不依赖于找到一定数量的破折号)会更好 –

+1

这个问题涉及获取特定于第2和第4短划线之间的子字符串。如果你不依赖至少4破折号,你会怎么得到它? – neelsg

+0

谢谢!这也有效:) – Maggie11

0

这将返回第二个破折号和第4破折号,B1是字符串:ABC-1234- GLK-1234

=MID(B1,FIND("-",B1,FIND("-",B1)+1),FIND("-",B1,FIND("-",B1,FIND("-",B1,FIND("-",B1)+1)+1)+1) - FIND("-",B1,FIND("-",B1)+1)) 
7

分割字符串并提取你想要什么:

Dim dataSplit() As String 
Dim dataString As String 

dataSplit = Split(Sheet1.Range("C14").Value2, "-") 

dataString = dataSplit(2) & "-" & dataSplit(3) 
+0

精彩的解决方案!我不是那么专业! :D谢谢! – Maggie11

+0

+1有效的方法。为了保证完整性,应该在Split上进行uBound测试,以确保所需零件的存在 – brettdj