VBA Excel删除重复的行

时间:2017-07-07 08:34:15

标签: excel vba excel-vba

所以我正在尝试删除列C中有重复的任何行。这是一个包含大约700条记录的列,但是这个值随着使用的数据不同而不同,因此我实现了“LastRow”功能。这是我的代码:

Public Function LastRowInCRC() As Long

    Dim wsCRC As Worksheet
    Set wsCRC = Worksheets("CRC")

    With wsCRC
        LastRowInCRC = .Cells(.Rows.Count, "C").End(xlUp).Row
    End With

End Function

Sub DeleteDupRowsCRC()

    Dim wsCRC As Worksheet
    Set wsCRC = Worksheets("CRC")

    Dim lrowcrc As Long
    lrowcrc = CRC.LastRowInCRC

    'Debug.Print "C8:C" & lrowcrc

    With wsCRC

        .Range("C8:C" & lrowcrc).RemoveDuplicates Columns:=Array(3)

    End With

End Sub

当我逐步调试时,我在以下行得到“应用程序定义或对象定义”错误:

.Range("C8:C" & lrowcrc).RemoveDuplicates Columns:=Array(3)

任何想法都出错了?我称之为“C8:C”& lrowcrc到注释掉的即时窗口,它给了我正确的范围值,所以我不认为问题是在那,但我找不到什么错误...任何帮助非常感谢。

2 个答案:

答案 0 :(得分:3)

一般情况下,将Array(3)更改为Array(1),它可能会有效。

不一般:以下适用于我,删除列C中的重复项确保您使用第一个工作表:

Option Explicit

Public Function LastRowInCRC() As Long

    Dim wsCRC As Worksheet
    Set wsCRC = Worksheets(1)

    With wsCRC
        LastRowInCRC = .Cells(.Rows.Count, "A").End(xlUp).Row
    End With

End Function

Sub DeleteDupRowsCRC()

    Dim wsCRC As Worksheet
    Set wsCRC = Worksheets(1)

    Dim lrowcrc As Long
    lrowcrc = LastRowInCRC

    'Debug.Print "C8:C" & lrowcrc

    With wsCRC

        .Range("C1:C" & lrowcrc).RemoveDuplicates Columns:=Array(1)

    End With

End Sub

在您的代码中,Array(3)表示您应该在.Range中至少有三列。但是你只有列C。因此,它给出了错误。要使用Array(3),请撰写A1:C,这样就可以了。

答案 1 :(得分:1)

我认为你的范围语法无效。 请尝试以下

With wsCRC
    .Range(Cells(8, 3), Cells(lrowcrc, 3)).Select
    .Range(Cells(8, 3), Cells(lrowcrc, 3)).RemoveDuplicates Columns:=1, Header:=xlYes

End With

旁边,我认为你应该使用下面的

  

lrowcrc = LastRowInCRC

或使用此代码获取最后一行

  

wsCRC。[C8] .SpecialCells(xlCellTypeLastCell).Row