VBA InStr()不按我想象的那样工作

时间:2017-07-21 20:16:53

标签: excel-vba vba excel

我有一个简单的问题:

For i = 0 to 8 Step 1
    If InStr(cell.Text, Str(i)) <> 0 Then
        'Do stuff
    End  If
Next i

现在,使用msgbox(cell.text),我已经能够确定我的字符串是&#34; 0N&#34; 而Str(i)是&#34; 0&#34;。我理解InStr()的方式是它返回一个你想要的位置的整数。如果它不包含您要查找的内容,则返回0.为什么这不起作用?

1 个答案:

答案 0 :(得分:2)

您对InStr功能的理解是正确的。但是,关于Str函数的假设是不正确的:)

如果没有符号,Str function会添加一个前导空格,因此您要将单个字符与两个字符进行比较:" 0",这将始终为false。

  

当数字转换为字符串时,始终为Number的符号保留前导空格。如果Number为正数,则返回的字符串包含前导空格,并隐含加号。

使用Cstr(i)来避免这种情况,

If InStr(cell.Text, CStr(i)) <> 0 Then

或将Str函数嵌套在Trim

If InStr(cell.Text, Trim(Str(i))) <> 0 Then

另请注意VBA中的0 = "0",因此从技术上讲, 需要明确地转换为字符串,尽管它可能是一个好习惯。

If Instr(cell.Text, i) <> 0 Then ' <-- this should also work