这里的问题是,您正在将值数组与单个值进行比较。如果阵列这么小,您可以利用一些Application.Methods
。另一种选择是Range.Find
在实际Range
对象上使用。我将在下面进行演示:
申请方法
Sub Test()
Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Result")
Dim arr As Variant
With Application
arr = .Transpose(ws.Range("A1:I1").Value)
If .Count(.Match(Array("Voltage", "Time"), arr, 0)) = 2 Then
Call PowerAndTime
End If
End With
End Sub
这里发生的是.Match
将返回两个元素的数组。如果找不到“电压”或“时间”,它将向阵列返回一个错误值,或者当找到其中一个时将返回一个数值。然后,.Count
将在返回的数组中对数值进行计数,并且只有当计数为2时,这两个值才会出现在您的初始范围内。
注意: .Match
需要一维数组,因此.Transpose
一开始是。
范围查找
Sub Test()
Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Result")
Dim rng1 As Range, rng2 As Range
Set rng1 = ws.Range("A1:I1").Find("Voltage", lookat:=xlWhole)
Set rng2 = ws.Range("A1:I1").Find("Time", lookat:=xlWhole)
If Not rng1 Is Nothing And Not rng2 Is Nothing Then
Call PowerAndTime
End If
End Sub
因此,只有当“电压”和“时间”都被发现为xlWhole
您特定范围内的值时,它才会继续调用PowerAndTime
。
您的数组方法与我的代码配合得很好,非常感谢。无论如何,我可以问一些基本问题,例如为什么使用数组时需要使用应用程序?我只是在没有应用程序的情况下尝试使用数组,直到我看到您的帖子然后才意识到它是必需的,它才起作用。
假设如果.Count(.Match(Array(“ Voltage”,“ Time”),arr,0))= 3或= 4,是否仍然意味着这两个值仍在我的初始范围内?
那将永远不会发生。您正在将两个值的数组与进行比较
arr
。所以返回值是0、1或2。这Application
是必需的,因为我们基本上使用了两个工作表函数,但要Application
确保它不会给您运行时错误。哦,我还能问一下0在Count(.Match(Array(“ Voltage”,“ Time”),arr,0))中是什么意思吗?
@cena,这是
MATCH
函数的match_type参数,它确定我们只需要完全匹配。