【发布时间】:2018-12-22 03:01:49
【问题描述】:
我是 VBA 新手,所以这可能是一个非常明显的错误。
为了简短起见,我尝试根据两个标准删除行:在 A 列中,如果它们具有相同的值(重复),在 B 列中,差异小于 100 ,然后从底部删除一行。
示例数据:
Column A Column B
1 300
1 350 SHOULD be deleted as second column diff. is <100 compared to row above
2 500
2 700 Should NOT be deleted as second column diff. is not <100
这是我想出的代码:
Sub deduplication()
Dim i As Long
Dim j As Long
Dim lrow As Long
Application.ScreenUpdating = False
With Worksheets("Sheet1")
lrow = .Range("A" & .Rows.Count).End(xlUp).Row
For i = lrow To 2 Step -1
For j = i To 2 Step -1
If .Cells(i, "A").Value = .Cells(j, "A").Value And .Cells(i, "B").Value - .Cells(j, "B").Value < 100 Then
.Cells(i, "A").EntireRow.Delete
End If
Next j
Next i
End With
End Sub
这在很大程度上有效,但前提是第二个标准是大于 (>)而不是小于 (每一行。我究竟做错了什么?有简单的解决方法吗?
谢谢
【问题讨论】:
-
需要取差值的绝对值吗?另外,用链式表达式检查括号。
-
考虑使用辅助列,这将使 vba 代码更容易。示例 C 列(例如单元格 C3):
=IF(AND(A2=A3, ABS(B3-B2)>100),"Delete", "Keep")。然后您的 vba 代码可以简单地在 c 列上向后循环并删除那些具有“删除”的内容。我喜欢下面@urdearboy 的回答,但是对于更复杂的问题,使用辅助列是一种方便的技术。
标签: vba excel duplicates