在全行中查找部分文本

时间:2019-02-27 19:58:34

标签: excel vba

我正在尝试在整行中搜索包含“ PROFILE”的字符串。它将始终大写,但格式为例如“ [9] PROFILE001”。

一些额外的信息:我已经使用Find命令找到了要在其中搜索字符串的行。它有自己的变量,我试图将其纳入所使用的范围。

我在这里搜索了多个部分字符串文章,但无法在我的代码中实现它。我尝试使用Like命令和IntStr命令无济于事。我认为我的问题可能是我如何引用搜索范围或如何搜索。

这是我当前代码的摘录:

'finding item name row
Set FindRow3 = Range("A1:A100").Find("Item Name", LookIn:=xlValues)
itemnamerow = FindRow3.Row
'The section above is working as intended

'searching for the word profile, the section below is the one I am having issues with
Range("B8:Z100").Style = "Normal"
If ActiveSheet.Range("B" & itemnamerow & ":Z" & itemnamerow) Like "*PROFILE" Then
    Range("C1").Value = "it worked"
End If

我当前遇到运行时错误13,在“ If ActiveSheet ...”行中键入不匹配。我无法获得正确的索引来使此正确。

如果试图找到部分字符串,我会尝试使用它。

TIA

2 个答案:

答案 0 :(得分:3)

您需要使用FindMatchCase参数设置的LookIn方法。可能LookAt可以确保检查实际值而不是公式语法。

Dim profileFound as Range
Set profileFound = ActiveSheet.Range("B" & itemnamerow & ":Z" & itemnamerow).Find("PROFILE",lookIn:=xlValues,MatchCase:=True,lookAt:=xlPart)

If Not profileFound is nothing Then
    debug.print profileFound.Value
    Range("C1").Value = "it worked"
else
    debug.print "no profile found"
End If

原始代码失败的原因是因为Excel不允许您根据单个值评估多单元格范围。您可以遍历该范围内的每个单元格并分别检查每个单元格,但是由于Find可用,因此是多余的。

答案 1 :(得分:3)

您没有为Range.Find操作提供足够的参数。切换到工作表的“匹配项”以找到项目名称,然后再次作为通配符搜索以找到 profile

dim m as variant, n as variant

m = application.match("Item Name", range("A1:A100"), 0)

If not iserror(m) then

    n = application.match("*profile*", cells(m, "B").resize(1, 25), 0)

    If not iserror(n) then

        Range("C1").Value = "it worked " & cells(m, n+1).value

    end if

end if