Excel VBA中“!=”的等价物是啥?

Posted

技术标签:

【中文标题】Excel VBA中“!=”的等价物是啥?【英文标题】: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

【问题讨论】:

您确定是!= 而不是<> 您的问题是什么?为什么!=在vba中不起作用,或者vba中的不等式运算符是什么? duckduckgo.com/?q=VBA+comparison+operators 【参考方案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; 而不是!=

【讨论】:

以上是关于Excel VBA中“!=”的等价物是啥?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法像 c# 一样在 Excel 的 VBA 中注释一行的一部分

Oracle 中 varchar(max) 的等价物是啥?

函数中静态变量的 Python 等价物是啥?

Flow 中星号 (*) 类型的用途是啥,TypeScript 中的等价物是啥?

PostgreSQL 中 Long 数据类型的等价物是啥?

VB.NET 中“(字节)”的等价物是啥?