2014-11-06 46 views
0

我想搜索以數字結尾的字符串,但它不是之前什麼號碼知結束這將是與搜索字符串VBA的Excel的INSTR函數與數目不詳

所以我使用了InStr函數功能

InStr(Range("B" & row).Value), "text") 

但現在的問題是,什麼我在尋找可以「text0」中,「text1」中,「text9」,我不希望創建10倍InStr函數來測試人的10個數字。

我在找的是一個替換字符,就像你有#代表Acces中輸入掩碼中的任何給定數字。因此,像這樣

InStr(Range("B" & row).Value), "text" & #) 

offcoarse這不會爲Excel工作將以此爲搜索「文本#」和西港島線不interpretate它#是任何給定數。

編輯: 範圍( 「B」 &行).value的將例如評價爲 「9S 279P3NOV/PDE NN1 PRS NO NVML」

我需要知道的是,其中NN1是這樣我就可以提取它。

但是下一行可以評估爲「9S 2793NOV/PE NN12 REQ BANA」 因此,我需要知道NN12在哪裏,在NN12發生變化之前還需要注意文本,NN現在有2位數字。

+0

查找['格式()'函數(http://msdn.microsoft.com/en-us/library/gg251755(V = office.14)的.aspx) – 2014-11-06 14:50:06

+0

您需要測試10數字(0到9)還是數字是隨機的?或者數字是UserInput? – 2014-11-06 14:59:19

+0

這個數字是隨機的,我查找的實際字符串總是以NN開始,所以找到的字符串可以是NN1,NN5或實際甚至NN25。沒有辦法在數字之前告訴他們。並且該數字永遠不會高於2位數字,也不會有沒有數字的NN。 格式會格式化一個字符串,這對我有幫助嗎? – 2014-11-06 15:02:30

回答

0

該功能可以幫你嗎?

If IsNumeric(Right(Range("B" & row).Value, 1)) Then 
    MsgBox "It ends with a Number." 
Else 
    MsgBox "It does not end with a Number." 
End If 
+1

恐怕不是。我正在搜索長長的字符串中的字符串。例如,在該字符串中的某處(不知道它將在哪裏)將會出現「NN5」。問題不在NN如何以數字結尾,它總是這樣做,但我如何讓它搜索以任何數字結尾的字符串。我可以搜索「NN」,但是我冒險會返回錯誤的possitives,因爲字符串「NN」也可以存在於單詞中。 和PS:如果你想測試一下最後一個字符是否是數字,請使用Right,而不是Left;) – 2014-11-06 15:14:11

+0

是的,這是對的!我很快。 – PaulFrancis 2014-11-06 15:28:14

3

閱讀問題

數目是隨機的下面的評論後,我要找的總是實際的字符串NN啓動,以便找到字符串可以是NN1,NN5或actualy甚至NN25。沒有辦法在數字之前告訴他們。

這是你正在嘗試?使用帶有通配符的LIKE

嘗試從評論/最近編輯這個

Sub Sample() 
    Dim stringToTest(1 To 5) As String 
    Dim i As Long 

    stringToTest(1) = "Test01" 
    stringToTest(2) = "Test01Test" 
    stringToTest(3) = "123" 
    stringToTest(4) = "01Test01" 
    stringToTest(5) = "NNature1234" 

    For i = 1 To 5 
     If stringToTest(i) Like "NN*#" Then Debug.Print stringToTest(i) 
    Next i 
End Sub 

跟進的問題

如果格式是要爲你的問題表明,即會出現空格,則嘗試此

Sub Sample() 
    Dim s As String, stringToTest(1 To 2) As String 
    Dim ar 
    Dim i As Long, j As Long 

    stringToTest(1) = "9S 279P3NOV/PDE NN1 PRS NO NVML" 
    stringToTest(2) = "9S 2793NOV/PE NN12 REQ BANA" 

    For i = 1 To 2 
     s = stringToTest(i) 
     If s Like "*NN*#*" And InStr(1, s, " ") Then 
      ar = Split(s, " ") 
      For j = LBound(ar) To UBound(ar) 
       If ar(j) Like "NN*#" Then 
        Debug.Print ar(j) 
        Exit For 
       End If 
      Next j 
     End If 
    Next i 
End Sub 

輸出

NN1 
NN12 
+0

我看到你要去的地方,但這意味着我需要循環它。我希望有一個選項可以使用輸入掩碼來避免這種情況。 我可以創建一個循環,其中變量從0到99,並使用instr函數查找「NN」&I. 問題是,這已經在遍歷行的循環中。因此,如果需要超過100行,並且每行需要循環100次,則總共需要執行10000次循環。 – 2014-11-06 15:30:57

+1

該循環是數組的一個示例。你可以使用它作爲'如果範圍(「B」和行).Value就像「NN *#」那麼' – 2014-11-06 15:32:35

+1

這正是我正在尋找的,我會試試看,看看我是否得到它 – 2014-11-06 15:50:59

0

如果我理解正確的話,簡單的循環可以幫助:

Sub SearchNum() 
    Dim i As Integer 
    Dim strSource As String 
    Dim boolNumFound As Boolean 

    'Found flag 
    numFound = False 

    'Put source string to variable 
    '(put here your range address) 
    strSource = Range("B1").Value 

    'Loop through your number range 
    For i = 0 To 99 
     If InStr(1, strSource, "text" & i) Then 
      numFound = True 
      MsgBox "text" & i 
      Exit For 
     End If 
    Next i 

End Sub 
+0

請不要這樣做 – 2014-11-06 15:49:44

+0

它會工作,但它浪費資源,就像我在其他評論中提到的,我已經處於一個循環的大循環中。如果我有100行,它會創建100個循環,每個循環內有100個循環,因此總共有10000個循環。另外不要忘記這是VBA,它不像執行正常的程序語言那麼快。 – 2014-11-06 19:14:04

0

昨天我有一個類似的問題。我接受了給我的答案並對其進行了編輯以適合您的問題,但我無法100%信用:-p。我相信這會讓你找到你想要的。

sub test() 

    Dim sWords() As String 
    Dim s As Variant 
    Dim sResult As String 


     sWords = Split(ActiveCell.Value, " ") 
     For Each s In sWords 
     If Left$(s, 2) = "NN" Then 
      sResult = sResult & s 
      msgbox sResult 
      sResult = "" 
     End if 
     Next s 

     end sub