excel - 如何使用 range.value 查找多个字符串?
问题描述
我尝试使用 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
.