我尝试使用 range("A1:I1").value 在第一行查找多个字符串,但它显示错误“不匹配”。我在这里做错了什么?还有另一种方法吗?
Dim sht as worksheet
Set sht = ThisWorkbook.Sheets("Result")
If sht.range("A1:I1").value = " Voltage" and sht.range("A1:I1").value = " Time" ,<---------error 'mismatch' occurs here
call powerandtime
最佳答案
这里的问题是您正在将一组值与单个值进行比较。对于这么小的数组,您可以使用一些 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
.
关于excel - 如何使用 range.value 查找多个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60000061/