在InStr中使用数组

我正在寻找一个vba代码来查找是否一个列的单元格中包含(不完全匹配)的string数组。 我在A1:A3242的工作表“Helper”中有一个假电子邮件列表,在JP表中我有我想查看的电子邮件列表(I:I)。

如果在第二列中find第一个列表中的电子邮件,我需要该行以黄色着色。

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对象所需”,任何帮助将不胜感激,提前谢谢:)

  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 

然后围绕这个函数包装你的string:

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

(应该工作,没有testing)

您应该使用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