温馨提示:本文翻译自stackoverflow.com,查看原文请点击:excel - how to find multiple strings using range.value?

excel - 如何使用range.value查找多个字符串?

发布于 2020-03-27 15:41:59

我想使用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

查看更多

查看更多

提问者
cena
被浏览
12
JvdV 2020-01-31 16:30

这里的问题是,您正在将值数组与单个值进行比较。如果阵列这么小,您可以利用一些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

发布
问题

分享
好友

手机
浏览

扫码手机浏览