2015-01-13 60 views
2

例如,我有這個字符串,其內容爲"IRS150Sup2500Vup"。它也可能是"IRS250Sdown1250Vdown"如何在VBA中的兩個字符之間找到一個數字

我期待提取兩個S之間的數字。因此,對於第一種情況,它將是150,第二種情況是250。這些數字並不總是3位數。它可能有所不同。

我曾嘗試:

Dim pos As Integer 
Dim pos1 As Integer 

pos = InStr("IRS150Sup2500Vup", "S") 
pos1 = InStrRev("IRS250Sdown1250Vdown","S") 

在此之後,我堅持如何獲得數出來。

需要一些關於如何做到這一點的指導。

+1

有一個正則表達式COM組件,您可以在VBA中使用它來處理正則表達式。請參閱此帖:http://stackoverflow.com/questions/22542834/how-to-use-regular-expressions-regex-in-microsoft-excel-both-in-cell-and-loops。然後,您可以使用帶有組的正則表達式輕鬆提取數據。 – gretro

回答

3

這裏有一個選項:

Public Sub Test4() 

    Dim pos As Integer 
    Dim pos1 As Integer 
    Dim strOrig As String 
    Dim strString As String 

    strOrig = "IRS150Sup2500Vup" 

    pos = InStr(1, strOrig, "S") + 1 
    pos1 = InStr(pos, strOrig, "S") 
    strString = Mid(strOrig, pos, pos1 - pos) 

    MsgBox strString 

End Sub 
-1

嘗試使用此功能:

pos = Mid("IRS150Sup2500Vup", 4, 6) 
+0

它不總是3個數字,它可能會有所不同。 – lakesh

+0

可能想添加到你的問題然後隊友,所以我們知道 –

+0

已經將它添加到問題。 – lakesh

4

正如我建議here,最簡單的方法是使用正則表達式。

Sub Test() 
Dim r As VBScript_RegExp_55.RegExp 
Dim sPattern As String, myString As String 
Dim mc As VBScript_RegExp_55.MatchCollection, m As VBScript_RegExp_55.Match 

myString = "IRS150Sup2500Vup" 
sPattern = "\d+" 'searches for numbers 
Set r = New VBScript_RegExp_55.RegExp 
r.Pattern = sPattern 

Set mc = r.Execute(myString) 
For Each m In mc ' Iterate Matches collection. 
    MsgBox "number: '" & m.Value & "' founded at: " & m.FirstIndex & " length: " & m.Length 
Next 

End Sub 
相關問題