use*_*868 3 excel vba excel-vba
我想知道是否有人知道如何删除重复的行..比如说,
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
Run Code Online (Sandbox Code Playgroud)
对于上面的特定示例,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
Run Code Online (Sandbox Code Playgroud)
不幸的是,在.Cells(n,1)上有运行时错误.我不知道它为什么......如果你知道某些东西可以与我分享或者修改它.会感恩的!
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
Run Code Online (Sandbox Code Playgroud)
这是一种更好,更快的方式.
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
Run Code Online (Sandbox Code Playgroud)
跟进
任何想法为什么反向行删除更好? - 富兰克林29秒前
删除行时,当您For定位行数时,循环会变得混乱.然后,您必须编写额外的代码行,以跟踪您删除的行.它也会减慢您的代码:)当您反向删除时,您不必考虑已删除的行,因为它不属于当前运行的循环.这样你的代码就会更快.但是就像我上面提到的那样,如果你没有使用反向行删除,那么使用我给出的第二个代码.那更快.
有一点,我想提一下.如果您使用的是Excel 2007/2010,那么@brettdj建议的一行代码是最快的:)
HTH
希德
| 归档时间: |
|
| 查看次数: |
30287 次 |
| 最近记录: |