如果单元格范围包含字符串,则跳转。

3
我知道这是一个经常讨论的话题,但我就是找不到答案。
我有一个范围。如果在这个范围内有一个单词,那么我需要它进入下一行代码。否则,跳过下一行代码并继续执行。
我无法定义这个范围。
这是我的代码:
For a = 4 To 20
    If (Range("H" & a).Value = "*nice*") Then
        GoTo Clean 
    Else
        GoTo pre
    End If
Next 

在我的范围内确实有单词“nice”,但它仍然被跳过而直接到达了“pre”。

怎么回事?我如何定义我的范围,让代码理解“范围内有‘nice’这个单词”?


2
我认为你的范围值中有一部分是“nice”。在这种情况下,你应该使用InStr(1, Range("H" & a).Value, "nice", vbTextCompare) > 0 - nightcrawler23
@aj_bk 你尝试过下面的答案吗?有任何反馈都会很好。 - Shai Rado
5个回答

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

change to

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

这个不需要>0也可以工作。你在InStr()中第一个参数不也需要1吗? - CallumDA
@CallumDA,第一个参数是不必要的,在VBA中instr将从第一个字母开始。如果你不相信,可以尝试一下。 - Mak
我认为可能是这样,尽管我可能会称其为可选而不是不必要 :) - 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开发中它们被认为是非常糟糕的做法。你可以创建另一个子程序,并从代码中调用它。


尽管范围包含“nice”,但它仍然跳过了清理并跳到之前。 :( - aj_bk
如果范围内有许多单词,且其中包含“nice”,则需要进入清理代码。例如:“这个男孩今天非常友好” - 这句话中有单词“nice”,因此需要进入清理代码。 - aj_bk
范围的地址是什么? - Vityata
地址?就是从哪里到哪里?“h4:h20” - aj_bk
你可以在 goto clean 前面写上 stop 并检查它是否停止。 - Vityata

1

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

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

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

您可以进一步扩展这个方法;如果您只想匹配单词“nice”,而不是包含“nice”的其他单词,您可以使用以下方法:
If " " & UCase((Range("H" & a).Value) & " " Like "[!A-Z]*NICE*[!A-Z]"

虽然使用Like比使用InStr慢,但由于它与正则表达式具有类似的语法,因此它允许更复杂的匹配。

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


我不知道如何做,所以我使用“跳转”来实现。 - aj_bk

0

我也遇到了同样的问题,对我来说最好的解决方案是以下内容。

If Not Range("H4:H20").Find(What:="nice", LookAt:=xlPart) Is Nothing Then

如果您需要精确匹配,必须使用xlWhole关键字。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接