2014-11-06 79 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