【问题标题】:Using an array in InStr在 InStr 中使用数组
【发布时间】:2017-10-19 08:18:40
【问题描述】:

我正在寻找一个 vba 代码,用于确定列的单元格中是否包含(不完全匹配)字符串数组。我有一个虚假电子邮件列表,存储在 A1:A3242 上的“Helper”工作表中,在工作表 JP 中,我有我想要检查的电子邮件列表(I:I)。

如果在第 2 列中找到来自第一个列表的电子邮件,我需要将该行涂成黄色。

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

【问题讨论】:

  • 你还没有声明你的变量cell。 (这就是为什么您会收到“需要对象”错误的原因 - 只有对象或用户定义类型在变量名之后才会有类似 .Value 的内容。)但是您也无法执行 Instr on一个数组。
  • 答案可能会使用If Not IsError(Application.Match(Cells(qq, "I").Value, list, 0)) Then,但我不是Match 的出口,所以我会让其他人回答。
  • @YowE3K 这是一个提示吗? ;)
  • @ShaiRado 形式的提示“这是可能工作的东西,但我太累和懒得实际测试它以确保我不会让自己尴尬将其发布为答案”

标签: vba excel match


【解决方案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))

(应该可以工作,未经测试)

【讨论】:

  • 谢谢!有用。我只是这么想,添加一个列,我只是在 @ 之后修剪什么,并使用前面的代码来检查完全匹配,但这有效。再次感谢您:D
【解决方案2】:

您应该使用Application.Match 函数,请参见下面的代码(代码的 cmets 内的解释):

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

【讨论】:

  • 感谢您抽出宝贵时间查看此内容,我尝试使用此方法,但不幸的是,它仅对完全匹配的颜色进行着色,我需要在“john.com”中找到“@test.com”。 smith@test.com”。
  • @CalinLencar 不是两张纸上的电子邮件字符串完全相同吗?
  • 很遗憾没有,我需要在“john.smith@test.com”中找到“@test.com”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 1970-01-01
  • 2017-02-05
  • 1970-01-01
  • 2016-09-09
  • 2022-11-30
相关资源
最近更新 更多