gpt4 book ai didi

excel - 循环变量数组时无法使用具有多个条件 (AND/OR) 的 If 语句?

转载 作者:行者123 更新时间:2023-12-02 04:00:45 24 4
gpt4 key购买 nike

背景:

在使用一些变体数组根据条件将数据排序到多个位置时,我注意到每次使用具有多个条件的 if 语句时都会标记为 false。这被用来创建字典,但由于仅循环变体数组时出现错误响应,它从未进入字典方面。

我将它们移至两个单独的 if 语句,一切都按预期工作。

<小时/>

问题:

为什么在循环变量数组中的数据时无法使用多条件 if 语句?

<小时/>

有问题的代码:

生成变体数组的通用代码:

Public ex_arr As Variant, ex_lr As Long, ex_lc As Long
Public dc As Scripting.Dictionary

Private Sub capture_export_array()
With Sheets("export")
ex_lc = .Cells(1, .Columns.Count).End(xlToLeft).Column
ex_lr = .Cells(.Rows.Count, ex_lc).End(xlUp).Row
ex_arr = .Range(.Cells(1, 1), .Cells(ex_lr, ex_lc)).Value
End With
End Sub

导致 False 条件的代码(立即窗口打印 = 0):

Private Sub find_unique_items()
Set dc = New Scripting.Dictionary
Dim i As Long
For i = LBound(ex_arr) To UBound(ex_arr)
If InStr(ex_arr(i, ex_lc), "CriteriaA") And InStr(ex_arr(i, 4), "CriteriaB") Then dc(ex_arr(i, 2)) = ex_arr(i, 3)
Next i
Debug.Print dc.Count
End Sub

产生所需输出的代码(立即窗口打印> 0):

Private Sub find_unique_items()
Set dc = New Scripting.Dictionary
Dim i As Long
For i = LBound(ex_arr) To UBound(ex_arr)
If InStr(ex_arr(i, ex_lc), "CriteriaA") Then
If InStr(ex_arr(i, 4), "CriteriaB") Then dc(ex_arr(i, 2)) = ex_arr(i, 3)
End If
Next i
Debug.Print dc.Count
End Sub

最佳答案

InStr 返回一个索引。作为逻辑运算符,And 希望具有 bool 操作数。给定Integer操作数,And运算符是一个按位运算符 - 事实上,这些运算符总是按位;当操作数是 bool 值时,我们只是将它们称为“逻辑”运算符。

If InStr(ex_arr(i, ex_lc), "CriteriaA") Then

此条件隐式将返回的索引强制转换为 Boolean 表达式,利用任何非零值都将转换为 True 的事实。

当您将逻辑/位运算符带入方程时,问题就开始了。

If InStr(ex_arr(i, ex_lc), "CriteriaA") And InStr(ex_arr(i, 4), "CriteriaB") Then dc(ex_arr(i, 2)) = ex_arr(i, 3)

假设第一个 InStr 返回 2,第二个返回 1If 表达式变为 If 2 And 1 Then,即 0。该值为零,因此条件为假。

等等,什么?

考虑 2 与 1 的二进制表示:

  2:  0010
1: 0001
AND: 0000

按位与产生 0,因为没有位对齐。

<小时/>

停止滥用隐式类型转换,并明确表达您的真正含义。您要做的事情是:

If (InStr(ex_arr(i, ex_lc), "CriteriaA") > 0) And (InStr(ex_arr(i, 4), "CriteriaB") > 0) Then dc(ex_arr(i, 2)) = ex_arr(i, 3)

(多余的括号仅用于说明目的)

现在,它会计算两个 Boolean 表达式,对这两个值应用按位与,并按预期正确工作。

True: 1111
True: 1111
AND: 1111

关于excel - 循环变量数组时无法使用具有多个条件 (AND/OR) 的 If 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57514747/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com