(檔案連結:)
各位前輩好,
小弟遇到一個問題,
本想試著使用字典物件,
但因所想比對的兩欄數值(K欄與M欄)欄位有可能會其中一欄空白,
另一欄非空白,
在這樣的情形下若是因空白而刪除,
恐怕會刪到不該刪的資料,
之前有比照板上前輩提供的程式碼去修改後做出一個檔案,
應該是板上沒錯,但不知該如何用搜索功能查詢自己的回文(非帖子),
以後使用前輩程式碼實在應該加註解附上原出處才是,
請見諒,小弟以後一定注意.
目前這個檔案還是有些問題,
有時明明兩欄皆為空白,但該橫列仍未被刪除;
第二點就是C欄必須非空白,
但不知該如何做修改.
還有一點就是不知何故,
明明重複的資料,還是無法徹底刪除,
這點也令小弟相當不解,
少量資料測試時沒有太大問題,
但大量資料就會出現問題.
先將小弟所期望的程式碼規則詳述如下以供參考:
(第一橫列為欄位名稱,不做比對.
資料共計15欄位,K欄與M欄為想要比對的數值,
兩欄數值無關連,不互相比對,僅自行比對)
1.若兩個或多個橫列的欄位K數值相同(或空白),且欄位M數值也相同(或空白),
則只留下一橫列,其餘刪除.
2.若兩個或多個橫列的欄位K數值相同,但欄位M的數值不同,
則這些橫列不變動.
在這些橫列中,留下一欄位的K數值,其餘橫列的欄位M清除.
欄位M的數值與位置不變動.
3.與上述規則相似,
若兩個或多個橫列的欄位K數值不同,但欄位M數值相同,
則這些橫列不變動.
欄位K的數值與位置不變動.
留下一欄位M數值,其餘橫列的欄位L數值清除.
4.若橫列的欄位K跟欄位M均為空白,
則刪除此橫列.
5.欄位K的數值與欄位M的數值不互相比較,兩欄數值各自比對,沒有關聯.
6.欄位K及欄位M的數值均為正整數或空白,不會是0或其他值.
附上小弟參考前輩程式碼修改後的程式及附檔如下:
附檔下載(Google雲端硬碟)- Public Sub extwo()
- Dim ar()
- Range("c2").Resize(Cells(Rows.Count, 3).End(xlUp).Row, 1).Select
- Selection.Resize(Selection.Rows.Count - 1, 1).Select
- Selection.Copy Range("a2")
- arr = Range("A2:AD" & Cells(Rows.Count, 1).End(xlUp).Row)
- K = UBound(arr)
- For i = 1 To UBound(arr) - 1
- For j = i + 1 To UBound(arr)
- If arr(i, 1) = "" Or arr(j, 1) = "" Then GoTo 10
- If arr(i, 11) & arr(i, 13) = arr(j, 11) & arr(j, 13) Then
- For L = 1 To UBound(arr, 2)
- arr(j, L) = ""
- Next
- K = K - 1
- ElseIf arr(i, 11) = arr(j, 11) And arr(i, 13) <> arr(j, 13) Then
- If arr(i, 13) = "" Then
- arr(i, 11) = ""
- Else
- arr(j, 11) = ""
- End If
- ElseIf arr(i, 11) <> arr(j, 11) And arr(i, 13) = arr(j, 13) Then
- If arr(i, 11) = "" Then
- arr(i, 13) = ""
- Else
- arr(j, 13) = ""
- End If
- ElseIf arr(i, 11) = "" And arr(i, 13) = "" Then
- arr(i, 1) = ""
- ElseIf arr(j, 11) = "" And arr(j, 13) = "" Then
- arr(j, 1) = ""
- '
- End If
-
- 10:
- Next
- Next
- ReDim ar(1 To K, 1 To UBound(arr, 2))
- K = 1
- For i = 1 To UBound(arr)
- If arr(i, 1) <> "" Then
- For L = 1 To UBound(arr, 2)
- ar(K, L) = arr(i, L)
- Next
- K = K + 1
- End If
- Next
- Range("a2:AD" & Cells(Rows.Count, 1).End(xlUp).Row).Clear
- [a2].Resize(UBound(ar), UBound(arr, 2)) = ar
- Columns(1).ClearContents
- [L2].Select
- End Sub
複製代碼 可以的話,
希望能夠有前輩不吝指點小弟,十分感謝. |