2012-12-05 180 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