我从这个网站获得了这个代码,但是我将问题格式化为我需要如何使用它。该代码最初仅适用于列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
答案 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