RawData is an excel report drawn from an employee database.(试图附上工作簿,但没看到如何做到这一点)。 RawData包含一些员工的多个不需要的重复项。我被告知这是因为员工数据库中的笛卡尔联接创建了RawData报告。无论是否是这种情况,我无法控制RawData报告的生成方式。就是这样。
我需要清理RawData报告,以便最终产品看起来像CorrectedView tab,我手动更正了。 RawData有时可能有几千行,因此自动清理将是一个巨大的帮助。
RawData的结构分为五组:Employee Basic Info(cols A-E),Education(cols F-H),Awards(cols I-L),Certifications(cols M-Q)和Accomplishments(cols R-T)。在CorrectedView中,我所做的是:
我正在寻找一种自动化流程的方法。我有一些代码(如下所示)完成了基本信息部分的#1,但这是我能得到的。谢谢你的帮助。
Sub DelSame()
Dim LastRow As Long, i As Long
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = LastRow To 3 Step -1
If Cells(i, 1).Value = Cells(i - 1, 1).Value Then Rows(i).Range("a1:e1").ClearContents
Next i
End Sub
答案 0 :(得分:1)
你几乎拥有它......使用AND作为多个标准:
Dim LastRow As Long, i As Long
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = LastRow To 3 Step -1
If Cells(i, 1).Value = Cells(i - 1, 1).Value AND Cells(i, 2).Value = Cells(i - 1, 2).Value AND Cells(i, 3).Value = Cells(i - 1, 3).Value Then
Rows(i).Delete
End If
Next i
EDIT1:
所以,上面的内容适合第一组列...现在是困难的部分。
您可以对所有列使用AND部分,这样您就不会在行之间得到任何重复项(实际上应该适合该帐单,以免意外删除任何项目。)
为了更多地参与,在删除任何行之前,您需要开始存储值以更适当地处理每个列组,以便您使用行a到b(未经测试的代码)。
Dim a as Long, b as Long, i as Long, lr as Long
lr = cells(rows.count,1).end(xlup).row
For i = lr to 3 step -1
If cells(i,1).value = cells(i+1,1).value then
If a = 0 then
a = i + 1
End If
Else
If a > 0 AND b = 0 then
b = i + 1
End If
End If
If b > 0 AND a > 0 Then
'perform narrowed actions on range(cells(a,1),cells(b,1))
a = 0 'resets for next grouping
b = 0 'resets for next grouping
End If
Next i