2017-07-22 142 views
-1

我想比较两个字符串,但是,函数返回错误匹配。我厌倦了使用三种不同的方法,并将不同列中的每种方法的结果发布到测试中。我厌倦了使用“string1”=“string2”,instr()和strcomp()进行比较。VBA Excel Instr()StrComp()不能正常工作

当使用相同的两个字符串时,它们甚至不会为每种方法返回相同的结果;有时候一种比较是正确的,而另一些可能不是。

误报,INSTR()返回的位置上,但子是不是在目标串,STRCOMP()返回0但话是不一样的,而“字符串1” =字符串2" 是真实的,但字符串是不同。

Worksheets("hemo").Cells(f, 1) = Trim(Worksheets(Stabv).Cells(Count, 1)) 
Worksheets("hemo").Cells(f, 2) = Len(Trim(Worksheets(Stabv).Cells(Count, 1))) 
Worksheets("hemo").Cells(f, 3) = Trim(LitBaseArray(y)) 
Worksheets("hemo").Cells(f, 4) = Len(Trim(LitBaseArray(y))) 

scrapeString1 = Trim(Worksheets(Stabv).Cells(Count, 1)) 
scrapeString2 = Trim(LitBaseArray(y)) 

If scrapeString1 = scrapeString2 Then 
Worksheets("hemo").Cells(f, 5) = "true" 
End If 

If StrComp(Trim(scrapeString1), Trim(scrapeString2), vbTextCompare) = 0 Then 
Worksheets("hemo").Cells(f, 6) = "true " & StrComp(Trim(scrapeString1), Trim(scrapeString2), vbTextCompare) 
End If 

If InStr(1, Trim(scrapeString1), Trim(scrapeString2), vbTextCompare) > 0 Then 
Worksheets("hemo").Cells(f, 7) = "true " & InStr(1, Trim(scrapeString1), Trim(scrapeString2), vbTextCompare) 
End If 

f = f + 1 
+0

你试过调试你的代码吗?调试时检查scrapeString1和scrapeString2的值。 – Mrig

+0

不是答案,但您不必在'StrComp'和'InStr'中再次使用'TRIM',因为您已经使用'Trim'将值赋给'scrapeString1'&'scrapeString1'。 – Mrig

+0

是的,我只是在尝试不同的事情。我甚至厌倦将单元格的内容放入一个字符串中。 – Padawan

回答

1

1.

If str1 = str2 Then 
    'str1 is exactly similar with str2 
    '"ABC" = "ABC", but "ABC" <> "Abc" 
End If 

2.

If StrComp(str1, str2, vbTextCompare) = 0 Then 
    'str1 is similar with str2, but in case insensitive manner 
    'StrComp("ABC", "ABC", vbTextCompare) = 0 and 
    'StrComp("ABC", "Abc", vbTextCompare) = 0 as well 
    'Use binary comparison if you want similar behavior as for the = operator 
End If 

Docs

3.

If InStr(1, str1, str2, vbTextCompare) > 0 Then 
    'Will be true if str1 contains str2 in a case insensitive manner 
    'To make it case-sensitive, use binary comparison instead of vbTextCompare 
    'InStr(1, Nothing, "A", vbTextCompare) will be 0 
    'InStr(1, "A", Nothing, vbTextCompare) will be 1 ! 
    'InStr(1, "", "A", vbTextCompare) will be 1 ! 
    'InStr(1, "ABC", "CD", vbTextCompare) will be 0 
    'InStr(1, "ABC", "BC", vbTextCompare) > 0 
    'InStr(1, "ABC", "AB", vbTextCompare) > 0 
    'InStr(1, "ABC", "abc", vbTextCompare) > 0 
    'InStr(1, "ABC", "c", vbTextCompare) > 0 
End If 

Docs

正如你所看到的,在不同的情况下可以预期不同的行为,特别是因为你在某些情况下他们的Trim而不是他们在其他人的Trim

+0

我很欣赏你在这个答案中所做的工作,但我的答案不是问题所在。我得到的字符串错误肯定没有相同的字符我他们 – Padawan

+0

@Padawan我想我的回答解决了你在你的问题和你在这里评论中描述的问题。如果你认为我误解了你,那么你可以通过给出一个确切的输入例子,确切的代码被执行,确切的输出以及为什么输出不符合你的期望的确切解释来帮助我。如果你这样做,那么我相信我会有足够的关于你的问题的信息来帮助你。 –