2016-12-05 51 views
0

我有一個宏,它貫穿搜索詞列表,將它們連接成一個由| s分隔的字符串,然後在單獨的工作表中搜索匹配項。然而,這個宏只能找到完全匹配(直到句子的情況),而不僅僅是如果字符串出現在單元格中。我想我應該使用FoundCell函數(而不是If InStr...)來獲得我想要的搜索,但我遇到了麻煩。在單元格中的任意位置搜索字符串 - Excel VBA

Public Sub HighlightListedValues() 
    Dim strConcatList As String 
    Dim cell As Range 

    For Each cell In Sheets("List").Range("A1:A13") 
     strConcatList = strConcatList & cell.Value & "|" 
    Next cell 

    For Each cell In Intersect(Sheets("Sheet1").Range("A:A"), Sheets("Sheet1").UsedRange) 
     If InStr(strConcatList, cell.Value) > 0 Then  
      cell.EntireRow.Interior.Color = RGB(255, 0, 0) 
     End If 
    Next cell 
End Sub 
+0

您是指[Chip Pearson的FindAll插件](http://www.cpearson.com/excel/FindAllXLA.aspx)? – Comintern

+0

如果只是引起問題的情況,您可以使用'如果InStr(UCase(strConcatList),UCase(cell.Value))> 0 Then' – YowE3K

+0

謝謝,但不僅如此,我要搜索的單元格在長描述中包含關鍵字時,如果單元格僅包含搜索列表中的確切單詞,則當前宏僅查找匹配項。例如如果「蘋果」在列表中,我希望能夠找到包含以下內容的單元格:「蘋果」,「我喜歡蘋果」和「我早餐吃2個蘋果」等 –

回答

0

如果你需要告訴字符串的一部分是否匹配另一個字符串的一部分,你將不得不遍歷每個詞語的「搜索詞」字符串(在這種情況下,最好是如果可能,請使用數組):

Public Sub HighlightListedValues() 
    Dim searchWords() As Variant 
    Dim aWord As Variant 
    Dim aCell As Range 

    searchWords = Sheets("List").Range("A1:A13").Value 

    For Each aCell In Intersect(Sheets("Sheet1").Range("A:A"), Sheets("Sheet1").UsedRange) 
     For Each aWord In searchWords 
      If InStr(UCase(aCell.Value), UCase(aWord)) > 0 Then 
       aCell.EntireRow.Interior.Color = RGB(255, 0, 0) 
       Exit For 
      End If 
     Next 
    Next 
End Sub 
相關問題