【问题标题】:What is the equivalent of "!=" in Excel VBA?Excel VBA中“!=”的等价物是什么?
【发布时间】:2012-07-20 16:46:09
【问题描述】:

问题是!=在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

【问题讨论】:

标签: excel vba function syntax inequality


【解决方案1】:

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

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

运算符!=用于C#、C++。

【讨论】:

    【解决方案2】:

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

    If Not strTest = "" Then ...
    

    【讨论】:

    • 这是不正确的。 Not 是逻辑反转运算符,对应于 C 风格语言中的 !
    【解决方案3】:

    只是一个注释。如果要将字符串与 "" 进行比较,请使用

    If LEN(str) > 0 Then
    

    甚至只是

    If LEN(str) Then
    

    相反。

    【讨论】:

    • 我知道一些对 VBA 有点陌生的人,这个答案可能看起来很奇怪,但不管你信不信,这比检查 &lt;&gt; "" 更有效
    • 支持这个答案的有趣事实:Visual Basic 和 Pascal 语言在开头存储字符串,然后存储内容本身。另一方面,基于 C 的语言和 Java 语言不存储长度,并使用 '\0'(空)终止符来表示字符串结束。因此,在 VBA 中获取长度很快——它只是从内存中读取一个整数——而在 Java 中很慢——你需要遍历字符串。
    • @LimaNightHawk 更有效率?你能详细说明一下吗?我猜大多数现代编译器都会捕获&lt;&gt; "" 模式并生成与Len(str) 相同的p 代码。
    • @Roland 这与 VBA 如何在内存中存储字符串有关。我会让你谷歌得到更完整的解释,但简而言之,字符串存储方式的一部分是第一个字节存储字符串的长度,然后以下字节存储字符:[3][C][A][T]。 “空”字符串的第一个字节有一个[0],检查Len 允许代码只检查和比较整数。此外,当您执行= "" 时,第二个"" 必须首先在内存中分配为它自己的字符串,然后与您的目标字符串进行比较。
    • @Roland:这将是一个简单的优化,但显然 VBA 编译器不会这样做。 Someone did a benchmark 的结果是,Len(str) &gt; 0 在 1000 万次迭代中的速度大约是 str &lt;&gt; "" 的两倍。也就是说,我们在这里讨论的是 extreme 微优化(1000 万次迭代时为 0.36 秒 vs 0.72 秒),所以我肯定会坚持使用更具可读性的str &lt;&gt; ""
    【解决方案4】:

    尝试使用&lt;&gt; 而不是!=

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-25
      • 2014-05-08
      • 2014-06-12
      • 1970-01-01
      • 2022-11-28
      • 2017-08-28
      • 2021-06-19
      相关资源
      最近更新 更多