从if语句宏vba中排除某些单元格值

从if语句宏vba中排除某些单元格值,vba,excel,Vba,Excel,我有一个宏,它运行3000++行数据,我想创建一个排除列表,因此,例如,当我的if语句查看某个范围时,如果它与某一组名称匹配,则跳过该行并继续 例如: 如果列A的值为“J Smith”,使其跳过该行并继续原样,则姓氏已更改为“Smith”,但可能会有所不同 如果我从宏中删除代码,它的整个代码都可以正常工作,不会出现任何问题,但一旦我添加它,它就可以灵活地处理数据了: If Range("A" & r).Value = "C Hopcroft" Or "M Pyatt" Or "D Fr

我有一个宏,它运行3000++行数据,我想创建一个排除列表,因此,例如,当我的if语句查看某个范围时,如果它与某一组名称匹配,则跳过该行并继续

例如:

如果列A的值为“J Smith”,使其跳过该行并继续原样,则姓氏已更改为“Smith”,但可能会有所不同

如果我从宏中删除代码,它的整个代码都可以正常工作,不会出现任何问题,但一旦我添加它,它就可以灵活地处理数据了:

 If Range("A" & r).Value = "C Hopcroft" Or "M Pyatt" Or "D Freeman" Or "D Jolley" Or "A Marsh" Or "M Heslop" Or "K Knowles" Or "J Robertson" Or "D Wood" Then
            r = r + 1
            Else
除了在A列中找到某个名称时,它会因“类型不匹配”而崩溃,但该名称似乎完全匹配,就像我将鼠标悬停在“if Range”(“A”&r”)上一样。该值为我提供了正确的值,如果我从数据中删除名称,则查看宏将完美完成

有什么想法吗

我的宏代码如下:

Sub unusedMacro()

Dim lr As Long, lr2 As Long, r As Long
    Set Sh1 = ThisWorkbook.Worksheets("Depot Dashboard")
    Set Sh2 = ThisWorkbook.Worksheets("Summary Data")
    Sh2.Select
    lr = Sh2.Cells(Rows.Count, "A").End(xlUp).Row
    x = 39
    For r = 2 To lr

        If Range("C" & r) = "TRUE" Then
        If Range("N" & r).Value = Worksheets("Depot Dashboard").Range("B17") Then
        If Range("A" & r).Value = "C Hopcroft" Or "M Pyatt" Or "D Freeman" Or "D Jolley" Or "A Marsh" Or "M Heslop" Or "K Knowles" Or "J Robertson" Or "D Wood" Then
        r = r + 1
        Else
            Sh2.Cells(r, 15).Copy
            Sh1.Cells(x, 7).PasteSpecial xlPasteValues  'Date
            Sh2.Cells(r, 1).Copy
            Sh1.Cells(x, 8).PasteSpecial xlPasteValues  'Name
            Sh2.Cells(r, 28).Copy
            Sh1.Cells(x, 9).PasteSpecial xlPasteValues  'Turn ID
            Sh2.Cells(r, 29).Copy
            Sh1.Cells(x, 10).PasteSpecial xlPasteValues  'Turn Desc
            x = x + 1
        End If
        End If
        End If
    Next r
    Sh1.Select
    Set Sh1 = Nothing
    Set Sh2 = Nothing
    Set x = Nothing


End Sub

IF
语句的
IF
行必须返回一个
布尔值[True,False]。目前,If Range(“A”&r).Value=“C Hopcroft”或“M Pyatt”或“D Freeman”或“D Jolley”
中的第一个测试返回布尔值,但其他测试不返回。要更正它,必须根据单元格中的值测试每个字符串(名称)

例如:

If Range("A" & r).Value = "C Hopcroft" Or Range("A" & r).value = "M Pyatt" Or Range("A" & r).value) = "D Freeman" Or Range("A" & r).value = "D Jolley"
这能解决问题吗