在Excel VBA中使用InStr的完全匹配

时间:2017-07-20 12:04:07

标签: excel vba search

我在我的程序中写了一个search function,它将返回一个text file中是否有特定字符串。现在问题函数没有完全匹配。

请考虑以下示例数据,这些数据将位于我的text file内,此处我的功能无法识别两个值是不同的。 sample data 1 : fol1_fol2_SMPTRsample data 2 : fol1_fol2_SMPTR1

请在下面找到我的搜索代码。

strFileName = "C:\data\datafile.txt"

sample data 1 and 2视为变量strSearch

的输入
Function sheetExists(strSearch, strFileName) As Boolean
    sheetExists = False
    Dim strLine As String
    Dim f As Integer
    Dim lngLine As Long
    Dim blnFound As Boolean
    f = FreeFile
    Open strFileName For Input As #f
    Do While Not EOF(f)
        lngLine = lngLine + 1
        Line Input #f, strLine
        If InStr(1, strLine, strSearch, vbBinaryCompare) > 0 Then
            'MsgBox "Search string found in line " & lngLine, vbInformation
            blnFound = True
            Exit Do
        End If
    Loop
    Close #f
    If blnFound Then
        sheetExists = True
    End If
End Function

让我知道您宝贵的建议和想法。

2 个答案:

答案 0 :(得分:1)

根据您所描述的内容,听起来您希望在分隔符之后将文本放在一行(在本例中为:)。

  1. 找到分隔符的位置:

    InStr(1, strLine, ":")

  2. 为它添加1以获取紧随其后的角色的位置。

    InStr(1, strLine, ":") + 1

  3. 使用Mid$函数获取从该位置开始到该字符串结尾的字符串(注意Mid$有3个参数;忽略最后一个将假设您需要字符串从第二个参数给出的位置开始到字符串的结尾处。)

    Mid$(strLine, InStr(1, strLine, ":") + 1)

  4. 使用LTrim$修剪字符串的左侧以删除任何前导空格。

    LTrim$(Mid$(strLine, InStr(1, strLine, ":") + 1))

  5. 最后,将其与搜索字符串进行比较。

    LTrim$(Mid$(strLine, InStr(1, strLine, ":") + 1)) = strSearch

  6. 简而言之,改变一下:

    If InStr(1, strLine, strSearch, vbBinaryCompare) > 0 Then
    

    对此:

    If LTrim$(Mid$(strLine, InStr(1, strLine, ":") + 1)) = strSearch Then
    

答案 1 :(得分:0)

如果我正确读取了这个,你想确保文件中匹配的字符串与第一个值完全相同。

一个建议是检查与分隔字符连接的strSearchValue。

例如,如果“示例数据1:fol1_fol2_SMPTR”后跟一个空格,您可以检查使用     If InStr(1,strLine, strSearch & " ",vbBinaryCompare) > 0 Then...

否则,如果输入值只需要与行完全匹配,并且没有其他字符,那么您可以使用 If strSearch = strLine Then...

由于