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

时间:2015-02-23 15:39:53

标签: excel vba excel-vba

我有一个运行3000 ++行数据的宏,我想创建一个排除列表,所以例如当我的if语句去查看一个范围,如果它匹配一组特定的名称就可以跳过那一行并继续前进。

示例是:

如果A栏的值为" J 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).Value它给了我正确的值,如果我从数据中删除名字就是在宏观上将完美地完成。

有什么想法吗?

我的宏代码如下:

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

1 个答案:

答案 0 :(得分:1)

IF语句的IF行必须返回Boolean值[True,False]。就目前而言,If Range("A" & r).Value = "C Hopcroft" Or "M Pyatt" Or "D Freeman" Or "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"

这样可以解决问题吗?