2016-12-14 95 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」 –

相關問題