删除重复数组问题

时间:2014-12-03 00:39:52

标签: excel-vba vba excel

我从这个网站获得了这个代码,但是我将问题格式化为我需要如何使用它。该代码最初仅适用于列A B ,但我需要它适用于列A:F ,我将顶部修复为请参阅我的 A:F 专栏,但我对阵列有问题,我是VBA的新手,所以我不能100%确定它是如何工作的,我只是知道我在那条线上收到错误。这是我的代码。

Sub DeleteRows()    
    With ActiveWorkbook.Worksheets("MC RRRs")
        Set Rng = Range("A:F").End(xlDown)
        Rng.RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
    End With   
End Sub

4 个答案:

答案 0 :(得分:2)

要回答这个问题,你的问题在于这一行:

Set Rng = Range("A:F").End(xlDown)
不应使用

结束方法/属性,因为它会让您处理Range("A:F")中的最后一个单元格。
这意味着您只能使用一(1)个单元格,但是您的下一行:

Rng.RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes

尝试删除两(2)列(或至少2个单元格)中的重复项 此外,如果只选择了一(1)个单元格,则将标题参数设置为xlYes也会产生错误。
此外,由于您使用 With Clause ,因此在Range之前加一个点 类似的东西:

Sub DeleteRows()
    Dim Rng As Range
    With ActiveWorkbook.Worksheets("MC RRRs")
        Set Rng = .Range("A:F")
        Rng.RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6), Header:=xlYes
    End With
End Sub

答案 1 :(得分:1)

Sub DeleteRows()
    Columns("A:F").Select
    ActiveSheet.Range("A:F").RemoveDuplicates _
        Columns:=Array(1, 2, 3, 4, 5, 6), Header:=xlYes
End Sub

我使用了录音机按钮,它起作用了。谢谢你的建议!

答案 2 :(得分:0)

经过测试:这将通过所有列。如果要设置限制,只需插入max而不是所有列。

Sub RemoveDuplicates()

Dim lastRow As Long
Dim tempLast As Long
Dim lastCol As Long
Dim colLet As String
Dim iCol As Integer  'because ConvertToLetter uses Integers

lastCol = Sheets("Sheet1").Cells(1, Columns.Count).End(xlToLeft).Column
lastRow = 0

'Get the true last row no matter what column it is in.  Loop through each and check.
For iCol = 1 To lastCol
    colLet = ConvertToLetter(iCol)
    lastRow = Sheets("Sheet1").Range(colLet & "2").End(xlDown).Row
    ActiveSheet.Range(colLet & "1:" & colLet & lastRow).RemoveDuplicates Columns:=1, Header:=xlYes
Next iCol

End Sub

Function ConvertToLetter(iCol As Integer) As String
'FROM http://support.microsoft.com/kb/833402
   Dim iAlpha As Integer
   Dim iRemainder As Integer
   iAlpha = Int(iCol / 27)
   iRemainder = iCol - (iAlpha * 26)
   If iAlpha > 0 Then
      ConvertToLetter = Chr(iAlpha + 64)
   End If
   If iRemainder > 0 Then
      ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64)
   End If
End Function

答案 3 :(得分:0)

在对这个数组问题进行了大量工作之后,我终于制作了一些工作代码。我希望这可以帮助有需要的人。 " -5"可以根据您的需求进行调整。我没有必要查看我的特定实例中的每一列,但如果你这样做,你可以将其增加到" -1"。成功的关键之一是围绕" arrColstoCheck"使用RemoveDuplicates命令时。

Sub RemoveDuplicates()

Dim rngDupes As Range
Dim lngCols As Long
Dim lngRows As Long
Dim i As Long
Dim strCols As String
Dim arrColstoCheck() As Variant
Dim wsComData1 as Worksheet

Set wsComData1 = Application.ActiveSheet

With wsComData1

    .Activate

    'Determine number of columns and rows in worksheet
    lngCols = .Cells(1, Columns.Count).End(xlToLeft).Column
    lngRows = .Cells(Rows.Count, 1).End(xlUp).Row

    ReDim arrColstoCheck(0 To lngCols - 5)
        'Fill array with column numbers
        For i = 0 To lngCols - 5
            arrColstoCheck(i) = i + 1
        Next i

    'Convert lngCols to Character for later use
    strCols = Chr(lngCols + 64)
    Set rngDupes = .Range("A1:" & strCols & lngRows)

        rngDupes.RemoveDuplicates Columns:=(arrColstoCheck), Header:=xlNo

    End With

End Sub