刪除重複行時遇到了一些麻煩,因爲我必須這麼做的方式很難。讓我解釋。根據重複的單元格和第二列的內容刪除行(VBA)
這是我(其實我有超過90,000行!)
+-----------+------------------+
| Ref | Sup |
+-----------+------------------+
| 10000-001 | S_LA_LLZ_INOR |
| 10000-001 | S_LA_RADAR_STNFN |
| 10000-001 | S_LA_VOR_LRO |
| 10000-001 | S_LA_DME_LRO |
| 10000-001 | S_LA_DME_INOR |
| 1000-001 | S_LA_GP_INOR |
| 1000-001 | S_LA_LLZ_ITF |
| 1000-001 | S_ZS_LLZ_ITF |
| 1000-002 | S_LA_GP_INOR |
| 1000-002 | S_LA_LLZ_ITF |
+-----------+------------------+
我所要做的就是在A列的重複搜索。那麼我必須檢查B列,如果S_LA_
或S_ZS_
之後的字符鏈是相同的。如果他們是一樣的。我必須刪除與S_LA_
行因此,在上面的行中,我將不得不刪除與1000-001|S_LA_LLZ_ITF
行。
我寫了一段代碼。它可以工作,但是在處理10,000行以上時,速度很慢。
Dim LastRowcheck As Long
Dim str1 As String
Dim str2 As String
Dim str3 As String
Dim str4 As String
Dim str5 As String
Dim str6 As String
Dim prueba As Integer
Dim prueba1 As Integer
Dim n1 As Long
Dim n3 As Long
Dim colNum As Integer
Dim colNum1 As Integer
Dim iCntr As Long
colNum = WorksheetFunction.Match("Ref", ActiveSheet.Range("1:1"), 0)
colNum1 = WorksheetFunction.Match("Sup",ActiveSheet.Range("1:1"), 0)
With ActiveSheet
LastRowcheck = .Range("A" & .Rows.Count).End(xlUp).Row
For n1 = 2 To LastRowcheck
str1 = Cells(n1, colNum).Value
For n3 = n1 + 1 To LastRowcheck + 1
str2 = Cells(n3, colNum).Value
prueba = StrComp(num1, num2)
If prueba = 0 Then
str3 = Cells(n1, colNum1).Value
str4 = Cells(n3, colNum1).Value
str5 = Right(str3, Len(str3) - 5)
str6 = Right(str4, Len(str4) - 5)
prueba1 = StrComp(str5, str6)
If prueba1 = 0 Then
If StrComp(num3, num4) = 1 Then
Cells(n3, colNum).Interior.ColorIndex = 3
ElseIf StrComp(num3, num4) = -1 Then
Cells(n1, colNum).Interior.ColorIndex = 3
End If
End If
End If
Next n3
Next n1
For iCntr = LastRowcheck To 2 Step -1
If Cells(iCntr, colNum).Interior.ColorIndex = 3 Then
Rows(iCntr).Delete
End If
Next iCntr
End With
我希望您能給我提供任何幫助或指導。
如何以上述方式使用刪除重複項?我無法控制哪些重複刪除(或至少我不知道如何) –
@Raystafarian因爲他只比較兩個不同字符串的最後部分。 OP我會閱讀數組的內容,就CPU時間而言,訪問數據表是非常昂貴的事情,數組會大大縮短您的時間。例如將表格範圍讀入數組 - 處理 - 清除表格 - 讀取數組返回表格 – 99moorem
聽起來很有希望,但我怎麼能這樣做呢? –