VBA 中的 IIF 函数

F.G*_*F.G 4 excel vba

我正在调试一些 VBA 代码,并且有一个 IIF 函数,但我不明白它在做什么。这是IIF(constant And i, "TRUE", "FALSE")我从0to获取值的地方n

我知道这个功能相当于IFExcel中的功能。但这种情况下的条件是什么呢?表达“数字”和“数字”意味着什么?我运行这个示例:

Sub Sample()    
    For i = 0 To 20  
        Cells(i + 1, 1) = i
        Cells(i + 1, 2) = 4 And i
    Next i     
End Sub
Run Code Online (Sandbox Code Playgroud)

我得到以下值:

在此输入图像描述

Fun*_*mas 6

该表达式4 And i将执行算术 AND 运算。例子:

     6:  0 0 0 0 0 1 1 0
     4:  0 0 0 0 0 1 0 0
Result:  0 0 0 0 0 1 0 0

    11:  0 0 0 0 1 0 1 1
     4:  0 0 0 0 0 1 0 0
Result:  0 0 0 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)

所以 6 AND 4 是 4,而 11 AND 4 是 0。
现在 0 被视为False,所有非 0 的东西都被视为True。在 IIF 语句中使用时,所有设置了第 3 位(从右数起)的数字都将执行TrueIIF 的 - 部分,所有其他数字将执行False.


Pᴇʜ*_*Pᴇʜ 5

你的And操作员做了一些明智的比较:

\n
result = expression1 And expression2  \n
Run Code Online (Sandbox Code Playgroud)\n

当应用于数值时,And运算符对两个数值表达式中相同位置的位进行按位比较,并根据下表设置结果中的相应位。

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n
如果表达式 1 中的位是表达式2中的位是结果中的位是
111
100
010
000
\n
\n

由于逻辑运算符和按位运算符的优先级低于其他算术运算符和关系运算符,因此任何按位运算符都应括在括号中以确保结果准确。

\n
\n

因此将其转换4为二进制会导致100. 我已经在下面的 3\xca\xb3\xe1\xb5\x88 列中完成了此操作,其中我将 1\xcb\xa2\xe1\xb5\x97 列的所有数字转换为二进制文件。其他两列只是用零填充以获得更好的可见性:

\n

在此输入图像描述

\n

因此,观察上表,1如果同一位置的两个位都是 a,您只会得到 a 作为结果1,否则您会得到 a 0。这意味着如果有一个,你总是会得到一个4结果4 and i1这意味着,如果由于按位比较而在右侧的 3\xca\xb3\xe1\xb5\x88 位中

\n

  • 很好......所有的理论基础是正确的,但我认为应该更清楚地说明比较结果(基于您解释的正确方式)将返回二进制表示形式,该表示形式将转换为十进制作为结果。为了更好地看到差异,您应该尝试解释“5 And i”表示的结果(而不是OP代码示例中的“4 And i”)...“4”的具体情况(仅后面跟着`0`) 使我们有机会仅考虑第三个数字(从右到左)相关。这种情况下的所有比较都将为“0”。 (2认同)