返回列表 上一主題 發帖

[發問] 判別重複後,依照條件刪除

回復 1# Michelle-W
  1. Sub Ex()
  2.     Dim rng As Range, dic As Object
  3.     Dim r As Long
  4.    
  5.     r = [A2].End(xlDown).Row
  6.     Range("$A$2:$G$" & r).RemoveDuplicates Columns:=Array(2, 4), Header:=xlYes
  7.    
  8.     Set dic = CreateObject("scripting.dictionary")
  9.     For Each rng In Range("A2", [A2].End(xlDown))
  10.         If Not dic.exists(CStr(rng.Offset(, 1).Value)) Then dic(CStr(rng.Offset(, 1).Value)) = ""
  11.         If rng.Offset(, 3) <> "" Then dic(CStr(rng.Offset(, 1).Value)) = rng.Offset(, 3)
  12.     Next
  13.    
  14.     For r = Range("A2").End(xlDown).Row To 2 Step -1
  15.         If Cells(r, 4) <> dic(CStr(Cells(r, 2).Value)) Then Rows(r).EntireRow.Delete
  16.     Next
  17. End Sub
複製代碼

   判斷並刪除.rar (16.53 KB)

TOP

回復 5# Michelle-W
  1. Sub Ex()
  2.     Dim rng As Range, dic As Object
  3.     Dim r As Long, txt As String
  4.    
  5.     r = [A2].End(xlDown).Row
  6.     Range("$A$1:$G$" & r).RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7), Header:=xlYes
  7.    
  8.     Set dic = CreateObject("scripting.dictionary")
  9.     For Each rng In Range("A2", [A2].End(xlDown))
  10.          If Not dic.exists(CStr(rng.Value)) Then dic(CStr(rng.Value)) = ""
  11.         If rng.Offset(, 2) <> "" Or rng.Offset(, 3) <> "" Or rng.Offset(, 4) <> "" Or rng.Offset(, 5) <> "" Or rng.Offset(, 6) <> "" Then
  12.             txt = Left(rng.Offset(, 2) & "          ", 10) & Left(rng.Offset(, 3) & "          ", 10) & _
  13.                   Left(rng.Offset(, 4) & "          ", 10) & Left(rng.Offset(, 5) & "          ", 10) & Left(rng.Offset(, 6) & "          ", 10)
  14.         Else
  15.             txt = ""
  16.         End If
  17.         
  18.         If txt <> "" Then dic(CStr(rng.Value)) = txt
  19.      Next
  20.    
  21.     For r = Range("A2").End(xlDown).Row To 2 Step -1
  22.         If Cells(r, 3) <> "" Or Cells(r, 4) <> "" Or Cells(r, 5) <> "" Or Cells(r, 6) <> "" Or Cells(r, 7) <> "" Then
  23.             txt = Left(Cells(r, 3) & "          ", 10) & Left(Cells(r, 4) & "          ", 10) & _
  24.               Left(Cells(r, 5) & "          ", 10) & Left(Cells(r, 6) & "          ", 10) & Left(Cells(r, 7) & "          ", 10)
  25.         Else
  26.             txt = ""
  27.         End If
  28.          If txt <> dic(CStr(Cells(r, 1).Value)) Then Rows(r).EntireRow.Delete
  29.     Next
  30. End Sub
複製代碼

TOP

回復 7# 准提部林
准大在此範例中,應用泡沫排序 (Bubble Sort) 的處理,
真是恰當好處,表現的淋漓盡致,在此受教了,謝謝您!

TOP

        靜思自在 : 盡多少本份,就得多少本事。
返回列表 上一主題