Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 用于比较数组中的值并给出结果的VPA程序(MS Excel)_Arrays_Vba_Excel_Compare - Fatal编程技术网

Arrays 用于比较数组中的值并给出结果的VPA程序(MS Excel)

Arrays 用于比较数组中的值并给出结果的VPA程序(MS Excel),arrays,vba,excel,compare,Arrays,Vba,Excel,Compare,数组中有一些变量。这些可能是“是”、“否”、“不”或“-”。 例如,我有一个数组arr(1T05)。这些值将是“是、是、否、否&是”。数组的长度可能会有所不同。与此类似,鉴于上述四个值(“是”、“否”、“NA”或“-”),组合可能会有所不同 我的要求是比较数组中的值,并在excel工作表的单元格中给出结果。例如,如果数组中的所有值都是“Yes”或“NA”,则结果应该是“Yes”。如果任何一个值为“否”或“-”,则结果应为“否” 您可以使用Application.Match查找arr数组中是否至少

数组中有一些变量。这些可能是“是”、“否”、“不”或“-”。 例如,我有一个数组arr(1T05)。这些值将是“是、是、否、否&是”。数组的长度可能会有所不同。与此类似,鉴于上述四个值(“是”、“否”、“NA”或“-”),组合可能会有所不同
我的要求是比较数组中的值,并在excel工作表的单元格中给出结果。例如,如果数组中的所有值都是“Yes”或“NA”,则结果应该是“Yes”。如果任何一个值为“否”或“-”,则结果应为“否”

您可以使用
Application.Match
查找
arr
数组中是否至少有1个“否”

Option Explicit

Sub CheckArray()

Dim arr As Variant
Dim Res As Variant, r As Variant
Dim Result As String   

' test #1: at least 1 "No" or "-"  in array
arr = Array("Yes", "-", "Yes", "NA", "Yes")

Res = Application.Match(Array("No", "-"), arr, 0)
For Each r In Res
    Result = "Yes" ' init value
    If Not IsError(r) Then ' <-- at least 1 result of "-" or "No" found
        Result = "No"
        Exit For
    End If
Next r    
' === The result is "No" ===


' test #2: there are no "No" or "-" in the array
arr = Array("Yes", "NA", "Yes", "NA", "Yes")

Res = Application.Match(Array("No", "-"), arr, 0)
For Each r In Res
    Result = "Yes" ' init value
    If Not IsError(r) Then ' <-- at least 1 result of "-" or "No" found
        Result = "No"
        Exit For
    End If
Next r

' === The result is "Yes" ===

End Sub
选项显式
子校验数组()
作为变体的Dim-arr
变光Res为变型,r为变型
将结果变暗为字符串
'测试#1:数组中至少有1个“否”或“-”
arr=数组(“是”、“是”、“是”、“NA”、“是”)
Res=Application.Match(数组(“No”,“-”),arr,0)
对于每一个r,以Res表示
Result=“Yes”初始值

如果不是IsError(r),则“您可以使用
应用程序。匹配
以查找
arr
数组中是否至少有1个“否”

Option Explicit

Sub CheckArray()

Dim arr As Variant
Dim Res As Variant, r As Variant
Dim Result As String   

' test #1: at least 1 "No" or "-"  in array
arr = Array("Yes", "-", "Yes", "NA", "Yes")

Res = Application.Match(Array("No", "-"), arr, 0)
For Each r In Res
    Result = "Yes" ' init value
    If Not IsError(r) Then ' <-- at least 1 result of "-" or "No" found
        Result = "No"
        Exit For
    End If
Next r    
' === The result is "No" ===


' test #2: there are no "No" or "-" in the array
arr = Array("Yes", "NA", "Yes", "NA", "Yes")

Res = Application.Match(Array("No", "-"), arr, 0)
For Each r In Res
    Result = "Yes" ' init value
    If Not IsError(r) Then ' <-- at least 1 result of "-" or "No" found
        Result = "No"
        Exit For
    End If
Next r

' === The result is "Yes" ===

End Sub
选项显式
子校验数组()
作为变体的Dim-arr
变光Res为变型,r为变型
将结果变暗为字符串
'测试#1:数组中至少有1个“否”或“-”
arr=数组(“是”、“是”、“是”、“NA”、“是”)
Res=Application.Match(数组(“No”,“-”),arr,0)
对于每一个r,以Res表示
Result=“Yes”初始值

如果不是IsError(r),那么‘我特别喜欢答案是自包含的,包括没有任何先决条件的测试用例。令人惊叹的!这太慢了!避免使用诸如
Application之类的单元格函数。匹配
a循环遍历一组单元格要快得多。我刚刚用你的函数运行了一个测试,30000个
yes
和一个
no
在30001。平均7-8秒。和我的答案中的循环一样,0,4秒!我的错:(你是对的。忘了我说的。我完全错了。你得到了我的选票。哦,但这真的让我失望,因为我错过了
8.63164493441582E-05
结尾的
E-05
,这不应该发生在我身上。@Peh你可以在这里读到:我特别喜欢答案是独立的,包括一个测试用例没有任何先决条件。太棒了!这太慢了!避免使用像
应用程序这样的单元函数。匹配
一个循环通过一堆单元要快得多。我刚刚用你的函数运行了一个测试,30000
和一个
在30001。平均7-8秒。和我的答案中的循环一样,0,4秒!我的坏:(你是对的。忘了我说的。我完全错了。你得到了我的选票。哦,但这真的让我失望,因为我错过了
8.63164493441582E-05
结尾的
E-05
,这不应该发生在我身上。@Peh你可以在这里读到: