Excel VBA中的“!=”等效项是什么?


95

问题是!=不能在excel vba中作为功能使用。

我想能够使用

If strTest != "" Then 代替 If strTest = "" Then

除此以外,还有其他方法!=吗?

我模仿的功能!=

Sub test()

Dim intTest As Integer
Dim strTest As String

intTest = 5

strTest = CStr(intTest) ' convert

Range("A" + strTest) = "5"



    For i = 1 To 10
        Cells(i, 1) = i

        If strTest = "" Then
            Cells(i, 1) = i
        End If

    Next i


End Sub

1
你确定这是!=<>
dasblinkenlight 2012年

你的问题是什么?为什么!=在vba中不起作用,或者vba中的不等式运算符是什么?
Gserg

Answers:


154

因为VBA中的不等式运算符是 <>

If strTest <> "" Then
    .....

该运算符!=在C#,C ++中使用。


28

在VBA中,!=运算符就是Not运算符,如下所示:

If Not strTest = "" Then ...

5
这是不正确的。Not是逻辑取反运算符,对应!于C风格的语言。
Zev Spitz

7

请注意。如果您想将字符串与进行比较 "",请使用

If LEN(str) > 0 Then

甚至只是

If LEN(str) Then

代替。


6
我知道对VBA来说有些<> ""
陌生的

6
一个有趣的事实支持这个答案:Visual Basic和Pascal语言存储字符串,其长度在开头,而内容本身在此之后。另一方面,基于C的语言和Java语言不存储长度,而是使用'\ 0'(空)终止符来表示字符串已结束。因此,在VBA中获取长度很快-仅从内存中读取一个整数-而在Java中则很慢-您需要遍历字符串。
Paulo Avelar '02

1
@LimaNightHawk 更有效率?您能详细说明一下吗?我想大多数现代编译器都会捕捉到该模式<> ""并产生与相同的p代码Len(str)
罗兰

@Roland这与VBA如何在内存中存储字符串有关。我将让您对Google进行更全面的说明,但简而言之,字符串存储方式的一部分是,第一个字节存储字符串的长度,然后接下来的字节存储字符:[3][C][A][T]。“空”字符串[0]的前一个字节为,并且检查Len允许代码仅检查和比较整数。此外,执行此操作时= """"必须先在内存中分配那一秒作为其自己的字符串,然后再与目标字符串进行比较。
LimaNightHawk

@Roland:这将是一个简单的优化,但是,显然,VBA编译器没有做到这一点。有人做了一个基准测试,结果Len(str) > 0大约str <> ""是一千万次迭代的两倍。就是说,我们在这里谈论的是极端的微优化(一千万次迭代为0.36 vs 0.72秒),所以我绝对会坚持使用更具可读性的str <> ""
Heinzi

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.