删除重复行时遇到了一些麻烦,因为我必须这么做的方式很难。让我解释。根据重复的单元格和第二列的内容删除行(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
听起来很有希望,但我怎么能这样做呢? –