首页 > 解决方案 > 如何使用 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

标签: excelvba

解决方案


这里的问题是您正在将一组值与单个值进行比较。在这样一个小数组的情况下,您可以使用一些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.


推荐阅读