返回列表 上一主題 發帖

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

Sub TEST()
Dim xR As Range, xDic, xU As Range, N&, V&, XX As Range
Set xDic = CreateObject("Scripting.Dictionary")
For Each xR In Range([A2], [A65536].End(xlUp))
  N = xDic(xR.Value)
  If N = 0 Then xDic(xR.Value) = xR.Row: GoTo 101
  V = Application.CountA(Range(xR(1, 3), xR(1, 7)))
  Set XX = xR
  If V > 0 Then Set XX = Range("A" & N): xDic(xR.Value) = xR.Row
  If xU Is Nothing Then Set xU = XX Else Set xU = Union(xU, XX)
101: Next
If Not xU Is Nothing Then xU.EntireRow.Delete
End Sub

表格底下的說明先刪除再執行,
程式碼不太好解釋,先用看看!

TOP

回復 9# Michelle-W

<拜金女的好友名單>
以下只解釋邏輯,不解釋語法,為了易於了解,部份有修改,
〔xDic字典檔〕及〔Union聯集儲存格〕的用法,自行去查說明:
 
Sub TEST()
Dim xR As Range, xDic, xU As Range, N&, V&, XX As Range
Set xDic = CreateObject("Scripting.Dictionary")
For Each xR In Range([A2], [A65536].End(xlUp))
 
  N = xDic(xR.Value)
  If N = 0 Then xDic(xR.Value) = xR.Row: GoTo 101
  '_第一次遇見你,請留下您的電話號碼(列號):xDic(xR.Value) = xR.Row
  '_N = 0,表示第一次的相遇,記住列號後,略過下方的語句(GoTo 101)
 
  V = Application.CountA(Range(xR(1, 3), xR(1, 7))) 
  '_第二次(及以後)遇見你,請問你口袋有沒有錢(檢查非空格)
 
  If V = 0 Then Set XX = xR
  '_如果沒有錢,你這次的新電話號碼我不想留:Set XX = xR
 
  If V > 0 Then Set XX = Range("A" & N): xDic(xR.Value) = xR.Row
  '_如果有錢,上次留的電話作廢:Set XX = Range("A" & N)
  '_換留這次的新電話號碼:xDic(xR.Value) = xR.Row
 
  If xU Is Nothing Then Set xU = XX Else Set xU = Union(xU, XX)
  '_將要作廢的電話號碼集中起來
 
101: Next
 
If Not xU Is Nothing Then xU.EntireRow.Delete
'_一次刪去作廢電話號碼
End Sub

TOP

        靜思自在 : 為人處世要小心細心,但不要「小心眼」。
返回列表 上一主題