|
发表于 2014-3-7 13:00
|
显示全部楼层
本楼为最佳答案
- Sub Macro1()
- Dim arr, d, rng As Range, i&, p$, j%
- Set d = CreateObject("scripting.dictionary")
- arr = ActiveSheet.UsedRange
- '挑选重复行
- For i = 5 To UBound(arr)
- p = ""
- For j = 1 To UBound(arr, 2)
- p = p & "," & arr(i, j)
- Next
- If Not d.exists(p) Then
- d(p) = ""
- Else
- If rng Is Nothing Then Set rng = Cells(i, 1) Else Set rng = Union(rng, Cells(i, 1))
- End If
- Next
- '前几列名称重复且27、28列为空,挑选17-19三列含1靠前的行
- For j = 19 To 17 Step -1
- For i = 5 To UBound(arr)
- If arr(i, 27) = "" And arr(i, 28) = "" And arr(i, j) = 1 Then
- p = arr(i, 1) & "," & arr(i, 2) & "," & arr(i, 5) & "," & arr(i, 8)
- If Not d.exists(p) Then
- d(p) = i
- Else
- If arr(i, 29) = "" Then
- If rng Is Nothing Then Set rng = Cells(i, 1) Else Set rng = Union(rng, Cells(i, 1))
- Else
- If rng Is Nothing Then Set rng = Cells(d(p), 1) Else Set rng = Union(rng, Cells(d(p), 1))
- End If
- End If
- End If
- Next
- Next
- If Not rng Is Nothing Then rng.EntireRow.Delete
- End Sub
复制代码 |
|