如果单元格的范围包含string,则转到

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

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

我无法定义范围。

这是我的代码:

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

在这个范围内,我确实有“好”的字眼,但是它仍然会跳过干净的直线前进。

怎么了? 我如何定义我的范围,以及代码如何理解在我的范围内,好词“在那里”。

你可以在“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 
 If (Range("H" & a).Value = "*nice*") Then 

改成

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

尝试这样的事情:

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

此刻你正在寻找string*好*。 星号不被视为通配符。

您可以使用Like运算符,然后这将允许您使用星号作为通配符:

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

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

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

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

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