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