InStr(1,cell.Value," - ")似乎没有使用Not

时间:2016-01-07 16:47:45

标签: excel vba excel-vba

我有条件似乎没有效果。

If Not InStr(1, cell.Value, "-") Then
    'Do Something
Else
    'Do something else
End If

其中cell.Value是带有短划线的电子表格中的数字:" 6621-123"或没有短划线:" 555321"

第一个If允许通过和Else被忽略。任何想法为什么这不起作用?

2 个答案:

答案 0 :(得分:9)

InStr在不匹配时返回0(不是-1,因为VBA字符串索引是基于1的) not 0true-1);所有其他可能的值也是如此> 0可以退回。

If InStr(1, cell.Value, "-") = 0 Then
    '// not present
Else
    '// present  

答案 1 :(得分:0)

  

第一个如果让我们两个通过,而Else被忽略。

我认为如果其中一个样本的实际Range.Value property包含一个连字符(又名Chr(45)而另一个没有,那么无论是什么样本的行为都不会相同是否正确InStr function的语法。你有什么足以确定一个真/假的条件¹虽然我通常在Instr周围使用一个CBool包装器来提醒自己它的结果是以布尔方式使用的。

我认为显示连字符的“值”实际上是6621123而不是6621-123,并且数字格式已应用于单元格(例如{的自定义数字格式{1}}。在这种情况下,如果您想确定显示值中是否存在连字符,请使用Range.Text property

0000-000

¹在VBA中 False 为零,对于所有意图和目的, True 是任何非False。严格地说,VBA中的True在数学上解析为(-1)而工作表TRUE解析为1.