我正在调试一些 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)
我得到以下值:
该表达式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.
你的And操作员做了一些明智的比较:
result = expression1 And expression2 \nRun Code Online (Sandbox Code Playgroud)\n当应用于数值时,And运算符对两个数值表达式中相同位置的位进行按位比较,并根据下表设置结果中的相应位。
| 如果表达式 1 中的位是 | 表达式2中的位是 | 结果中的位是 |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 0 |
由于逻辑运算符和按位运算符的优先级低于其他算术运算符和关系运算符,因此任何按位运算符都应括在括号中以确保结果准确。
\n因此将其转换4为二进制会导致100. 我已经在下面的 3\xca\xb3\xe1\xb5\x88 列中完成了此操作,其中我将 1\xcb\xa2\xe1\xb5\x97 列的所有数字转换为二进制文件。其他两列只是用零填充以获得更好的可见性:
因此,观察上表,1如果同一位置的两个位都是 a,您只会得到 a 作为结果1,否则您会得到 a 0。这意味着如果有一个,你总是会得到一个4结果4 and i1这意味着,如果由于按位比较而在右侧的 3\xca\xb3\xe1\xb5\x88 位中