返回列表 上一主題 發帖

[發問] 這種重複值刪除的VBA該如何寫(2003)

不好意思借標題問一下,

有試著將lpk187大的程式碼略做修改,

因為對VBA真的還是新手程度,所以修改的部份做得很不好,

先簡述目前希望達到的效果:
1.若兩橫列的J欄數值不同,L欄數值相同,
則僅清除其中一橫列的L欄數值,兩橫列均不刪除.

2.跟上述規則類似,
若兩橫列的J欄數值相同,L欄數值不同,
則僅清除其中一橫列的J欄數值,兩橫列均不刪除.

3.若兩橫列的J欄數值及L欄數值均為空白,
則兩橫列均刪除.
修改後程式碼如下:
  1. Public Sub extwo()
  2. Dim ar()
  3. Range("c2").Resize(Cells(Rows.Count, 3).End(xlUp).Row, 1).Select
  4. Selection.Resize(Selection.Rows.Count - 1, 1).Select
  5. Selection.Copy Range("a2")

  6. arr = Range("A2:AD" & Cells(Rows.Count, 1).End(xlUp).Row)
  7. K = UBound(arr)
  8. For i = 1 To UBound(arr) - 1
  9.     For j = i + 1 To UBound(arr)
  10.         If arr(i, 1) = "" Or arr(j, 1) = "" Then GoTo 10
  11.         If arr(i, 11) & arr(i, 13) = arr(j, 11) & arr(j, 13) Then
  12.             For L = 1 To UBound(arr, 2)
  13.                 arr(j, L) = ""
  14.             Next
  15.             K = K - 1
  16.         ElseIf arr(i, 11) = arr(j, 11) And arr(i, 13) <> arr(j, 13) Then
  17.             If arr(i, 13) = "" Then
  18.             arr(i, 11) = ""
  19.             Else
  20.             arr(j, 11) = ""
  21.             End If

  22.         ElseIf arr(i, 11) <> arr(j, 11) And arr(i, 13) = arr(j, 13) Then
  23.             If arr(i, 11) = "" Then
  24.             arr(i, 13) = ""
  25.             Else
  26.             arr(j, 13) = ""
  27.             End If

  28.         ElseIf arr(i, 11) = "" And arr(i, 13) = "" Then
  29.         arr(i, 1) = ""

  30.         ElseIf arr(j, 11) = "" And arr(j, 13) = "" Then
  31.         arr(j, 1) = ""
  32. '
  33.         End If
  34.         
  35. 10:
  36.     Next
  37. Next

  38. ReDim ar(1 To K, 1 To UBound(arr, 2))
  39. K = 1
  40. For i = 1 To UBound(arr)
  41.     If arr(i, 1) <> "" Then
  42.         For L = 1 To UBound(arr, 2)
  43.             ar(K, L) = arr(i, L)
  44.         Next
  45.         K = K + 1
  46.     End If
  47. Next
  48. Range("a2:AD" & Cells(Rows.Count, 1).End(xlUp).Row).Clear
  49. [a2].Resize(UBound(ar), UBound(arr, 2)) = ar

  50. Columns(1).ClearContents
  51. [L2].Select
  52. End Sub
複製代碼
目前的問題在於,

測試少量資料時(比如說10筆以內),

看似沒有問題,

但是若測試大量資料時,

用EXCEL2007的內建的格式化條件設定,

去標出重複的值時,

會發現還是有很多重複資料沒被刪除,

需再跑第二次程式碼,

才會清除,

不知問題出在哪裡,

還望前輩不吝指點,十分感謝.

TOP

        靜思自在 : 是非當教育,讚美作警惕。
返回列表 上一主題