2016-12-14 93 views
2

我知道这是一个话题很多,但我只是找不到答案。如果单元格区域包含字符串,然后转到

我有一个范围。如果在那个范围内有一个词,那么我需要它去下一个代码。如果不是,则跳过下一个代码并继续。

我无法定义范围。

这是我的代码:

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

在我有字“好”的范围内,但它仍然会跳过清洁,径直预。

怎么了?我如何定义我的范围和代码如何能够明白,在我的范围内的话很好的” IN有

+2

我认为你的范围的一部分价值很不错。在这种情况下,你应该使用'InStr(1,Range(“H”&a).Value,“nice”,vbTextCompare)> 0' – nightcrawler23

+0

@aj_bk你有没有尝试过下面的答案?任何反馈会很好... –

回答

1

可以前后 “好” 与通配符(*)使用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
If (Range("H" & a).Value = "*nice*") Then 

变化

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

你甚至不需要> 0这个工作。你不需要在InStr()中第一个参数是1吗? – CallumDA

+0

@ CallumDA,第一个参数是不必要的,instr将从VBA中的第一个字母开始。如果你不相信你可以试试。 – Mak

+0

我认为可能是这样,但我可能会把它称为可选,而不是*不必要* :) – CallumDA

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发展中被认为是非常糟糕的做法。你可以做的是创建另一个子例程并从代码中调用它。

+0

它仍然跳过干净的跳跃,甚至预先范围containe“不错”:( –

+0

有很多单词在该范围内和ig“好”是在他们那么它需要去干净。ex “男孩今天很好“ - 这个词有”nice“,所以去清洁代码 –

+0

这个范围的地址是什么? – Vityata

1

此刻的你'正在寻找字符串*好*。星号不被视为通配符。

可以使用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语句,而是使用函数或子过程来处理每个希望运行的代码。

+0

idk如何使用“go to” –

相关问题