2017-10-19 112 views
1

我正在查找一個vba代碼,以查找列的單元格中是否包含字符串數組(不完全匹配)。我在A1:A3242的工作表「助手」中存儲了一個假電子郵件列表,在JP表中我有我想檢查的電子郵件列表(我:我)。在InStr中使用數組

如果在第二列中找到第一個列表中的電子郵件,我需要該行以黃色着色。

Dim list As Variant, FF As Long, qq As Long 

list = Sheets("Helper").Range("A1:A3242").Value 
FF = Range("I" & Rows.count).End(xlUp).Row 
For qq = 1 To FF 
    If InStr(1, list, cell.Value) <> 0 Then 
     Range("I" & qq).EntireRow.Interior.Color = vbRed 
    End If 
Next qq 

End Sub 

我真正的新VBA,我不知道這是否正確的做法,我得到錯誤「424所需的對象」,任何幫助將不勝感激,謝謝提前:)

+0

您還沒有宣佈你的變量'cell'。 (這就是爲什麼你得到一個「需要對象」的錯誤 - 只有一個對象或一個用戶定義的類型會在變量名後面有'.Value'。)但是你也不能執行'Instr'在一個數組上。 – YowE3K

+0

答案可能會使用'If Not IsError(Application.Match(Cells(qq,「I」).value,list,0))Then',但我不是'Match'上的導出,所以我會讓別人回答。 – YowE3K

+0

@ YowE3K是一個提示? ;) –

回答

1
Function GetDomain(s as String) as String 
Dim x as Integer 
X = instr(s,"@") 
If x=0 then 
    GetDomain = s 
Else 
    GetDomain = right(s,len(s)-x) 
End IF 
End Function 

然後環繞這個功能您的字符串:

 If Not IsError(Application.Match(GetDomain(.Range("I" & qq).Value), list, 0)) 

(應該工作,未測試)

+0

謝謝!有用。我只是在想同樣的事情,添加一個列,我只是修剪@後面的內容,並使用以前的代碼來檢查完全匹配,但這是有效的。再次感謝您:D –

1

您應該使用Application.Match功能,請參見下面的代碼(代碼的註釋中說明):

Option Explicit 

Sub MatchEmailList() 

Dim list As Variant, FF As Long, qq As Long 

list = Sheets("Helper").Range("A1:A3242").Value 

With Sheets("JP") ' fully qualify the sheet 
    FF = .Range("I" & .Rows.Count).End(xlUp).Row ' get last row in column "I" from sheet "JP" 

    For qq = 1 To FF 
     ' if not is Error >> Match was successful to find a match 
     If Not IsError(Application.Match(.Range("I" & qq).Value, list, 0)) Then 
      .Rows(qq).Interior.Color = vbRed ' color entire roe in red 
     End If 
    Next qq 
End With 

End Sub 
+0

感謝你花時間去查看這個,我嘗試使用這種方法,但不幸的是,它僅着色完全匹配,我需要在「[email protected]」中找到「@ test.com」。 –

+0

@CalinLencar是不是兩張表上的電子郵件字符串完全相同? –

+0

不幸的是,我需要在「[email protected]」中找到「@ test.com」。 –