如果单元格范围包含字符串然后转到

时间:2016-12-14 08:56:10

标签: excel vba excel-vba

我知道这是一个很多话题,但我找不到答案。

我有一个范围。如果在那个范围内有一个单词,那么我需要它去转到下一个代码。如果没有,请跳过下一个代码继续前进。

我无法定义范围。

这是我的代码:

For a = 4 To 20
    If (Range("H" & a).Value = "*nice*") Then
        GoTo Clean 
    Else
        GoTo pre
    End If
Next 

在这个范围内,我确实有“#34; nice"但它仍然跳过干净,直接前往。

怎么了?我如何定义我的范围以及代码如何理解在我的范围内的单词nice"在那里。

4 个答案:

答案 0 :(得分:2)

您可以在" nice"之前和之后使用Like和通配符(*),如:

If Range("H" & a).Value Like "*nice*" Then

将此行添加到整个代码中:

Option Explicit

Sub TestLike()

Dim a As Long

For a = 4 To 20
    If Range("H" & a).Value Like "*nice*" Then
        GoTo Clean
    Else
        GoTo pre
    End If
Next

End Sub

答案 1 :(得分:1)

If (Range("H" & a).Value = "*nice*") Then

更改为

If instr(Range("H" & a).Value,"nice")>0 Then

答案 2 :(得分:1)

尝试这样的事情:

Option Explicit
Sub TestMe()
    Dim a As Long

    For a = 4 To 20
        If InStr(1, Range("H" & a).Value, "nice") Then
            GoTo Clean
        Else
            GoTo pre
        End If
    Next code here

End Sub

只有一个大提醒 - 尽量避免使用goto语句,只要它们在VBA开发中被认为是非常糟糕的做法。你可以做的是创建另一个子例程并从代码中调用它。

答案 3 :(得分:1)

目前你正在寻找字符串* nice *。星号不被视为通配符。

您可以使用Like运算符,这样您就可以使用星号作为通配符:

If (Range("H" & a).Value Like "*nice*") Then

然后你可以扩展这个;如果您只想要“好”这个词匹配,而不是其他包含“好”的词,您可以使用以下内容:

If " " & UCase((Range("H" & a).Value) & " " Like "[!A-Z]*NICE*[!A-Z]"

虽然使用Like比使用InStr慢,但它允许更复杂的匹配,因为它与RegEx的语法相似。

我还建议,不要使用GoTo语句,而是对要运行的每段代码使用函数或子过程。