我想知道是否有人知道如何删除重复的行..比如说,
A B C
1 1 3 4
2 2 6 9
3 TEST 1 2
4 TEST 1 2
5 Both 1
6 Hi 2
7 None 3 3
8 Loud 4 4
对于上面的特定示例,TEST重复两次..在其他一些情况下,名称可以是其他类型,如NOON,Morning等。而第8行不一定是最后一行。 我不知道如何比较行来检查重复的名称,然后删除它们。我需要运行一个宏,所以我需要VBA。如果您知道,请与我分享..将会感恩!
尝试代码:
Sub Macro1()
Dim LastRow As Long, n As Long, rowstodelete As Long
LastRow = Worksheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
For n = 1 To LastRow
With Worksheets("Sheet1").Cells(n, 1)
If .Cells(n, 1) = .Cells(n + 1, 1) Then
rowstodelete = Worksheets("Sheet1").Cells(n, 1)
Rows(rowstodelete).Select
Selection.Delete Shift:=xlUp
End If
End With
Next n
End Sub
不幸的是,在.Cells(n,1)上有运行时错误。我不知道为什么会这样。如果你知道某些东西可以与我分享或者修改它。会很感激的!
答案 0 :(得分:6)
user1204868
建议在删除行时,始终以反向模式执行。看到这段代码。您也无需在删除前选择单元格。这将减慢你的代码:)
Sub Sample()
Dim LastRowcheck As Long, n1 As Long
With Worksheets("Sheet1")
LastRowcheck = .Range("A" & .Rows.Count).End(xlUp).Row
For n1 = LastRowcheck To 1 Step -1
If .Cells(n1, 1).Value = Cells(n1 + 1, 1).Value Then
.Rows(n1).Delete
End If
Next n1
End With
End Sub
这是一种更好的更快方式。
Sub Sample()
Dim LastRowcheck As Long, n1 As Long
Dim DelRange As Range
With Worksheets("Sheet1")
LastRowcheck = .Range("A" & .Rows.Count).End(xlUp).Row
For n1 = 1 To LastRowcheck
If .Cells(n1, 1).Value = Cells(n1 + 1, 1).Value Then
If DelRange Is Nothing Then
Set DelRange = .Rows(n1)
Else
Set DelRange = Union(DelRange, .Rows(n1))
End If
End If
Next n1
If Not DelRange Is Nothing Then DelRange.Delete
End With
End Sub
<强>后续强>
任何想法为什么反向行删除更好? - 富兰克林29秒前
当您删除行时,For
循环会因为您设定的行数目标而混乱。然后,您必须编写额外的代码行,以跟踪您删除的行。它也会减慢您的代码:)当您反向删除时,您不必考虑已删除的行,因为它不属于当前运行循环。这样你的代码就会更快。但是就像我上面提到的那样,如果你没有使用反向行删除,那么使用我给出的第二个代码。那更快。
我想提一点。如果您使用的是Excel 2007/2010,那么@brettdj建议的一行代码是最快的:)
HTH
西特
答案 1 :(得分:4)
<强>手册强>
Bill Jelen's website提供了三种非VBA技术
对于(3),等价的VBA将是这样的(对于没有标题)
ActiveSheet.Range("$A$1:$C$100").RemoveDuplicates Columns:=1, Header:=xlNo
处理现有重复
我的免费Duplicate Master addin会让你
在单元格,整行(似乎是您的问题)或连续的某些列上重复
但更重要的是,它会让你运行比完全字符串更复杂的匹配,即
答案 2 :(得分:0)
我再次尝试了我的代码,它可以很好地工作..谢谢!我将在这里分享它以回答类似的问题!
Sub Macro1()
Dim LastRowcheck As Long, n1 As Long, rowschecktodelete As Long
LastRowcheck = Worksheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
For n1 = 1 To LastRowcheck
With Worksheets("Sheet1").Cells(n1, 1)
If Cells(n1, 1) = Cells(n1 + 1, 1) Then
Worksheets("Sheet1").Cells(n1, 1).Select
Selection.EntireRow.Delete
End If
End With
Next n1
End Sub
答案 3 :(得分:0)
在VBA(2007年或更高版本)中执行此操作的最简单方法:
Worksheet("Sheet1").Range("A1").CurrentRegion.RemoveDuplicates(Array(1, 2, 3))
根据您的工作表布局,您可能需要将Range("A1").CurrentRegion
调整为您的数据范围...
答案 4 :(得分:-3)
我认为我们需要在运行此宏之前先对数据进行排序,以完全删除重复项。