VBA Excel 2010 – 删除不包含基于另一列的列的最大值的行

我有一个excel电子表格有几列,其中两个有一个ID(重复自己)和一个date。

我试图完成的是删除所有行的ID只留下最大date的行。

我有一个所有独特的即时消息的第二张表。

这是我现在所拥有的:

Public Sub sbMaxDateByIM() Dim max As Date Dim currentIM As String Dim MaxDateCurrentIM As Date Dim dateRange As Range Dim imrange As Range Application.Sheets("sheet1").Activate Set dateRange = ActiveSheet.Range(ActiveSheet.Range("E2"), ActiveSheet.Range("E2").End(xlDown)) Set imrange = ActiveSheet.Range(ActiveSheet.Range("A2"), ActiveSheet.Range("A2").End(xlDown)) Application.ScreenUpdating = False Application.Sheets("UniqueIMS").Activate For IM = 1 To ActiveSheet.Range(ActiveSheet.Range("A1"), ActiveSheet.Range("A1").End(xlDown)).Rows.Count currentIM = Sheets("UniqueIMS").Cells(IM, 1).Value MaxDateCurrentIM = Evaluate("=MAX(IF(""imrange""=""currentIM"",))""dateRange""") For J = 2 To Range(Range("E2"), Range("E2").End(xlDown)).Rows.Count + 1 If currentIM = Sheets("Sheet1").Cells(IM, 1).Value And CDate(Sheets("Sheet1").Cells(J, 5).Value) < MaxDateCurrentIM Then Rows(J).EntireRow.Delete End If Next J Next IM Application.ScreenUpdating = True End Sub 

任何ideias将非常感激,代码行不工作是:

 MaxDateCurrentIM = Evaluate("=MAX(IF(""imrange""=""currentIM"",))""dateRange""") 

你能试试吗? 你的公式语法是我想的。 (也为什么设置currentIM两次?)另外,删除行时,你需要倒退。

 Public Sub sbMaxDateByIM() Dim max As Date Dim currentIM As String Dim MaxDateCurrentIM As Date Dim dateRange As Range Dim imrange As Range With Sheets("sheet1") Set dateRange = .Range(.Range("E2"), .Range("E2").End(xlDown)) Set imrange = .Range(.Range("A2"), .Range("A2").End(xlDown)) End With Application.ScreenUpdating = False Application.Sheets("UniqueIMS").Activate For IM = 1 To Range(Range("A1"), Range("A1").End(xlDown)).Rows.Count currentIM = Sheets("sheet1").Cells(IM, 1).Value MaxDateCurrentIM = Evaluate("=MAX(IF(" & imrange.Address & "=""" & currentIM & """," & dateRange.Address & "))") For J = Range(Range("E2"), Range("E2").End(xlDown)).Rows.Count + 1 To 2 Step -1 If currentIM = Sheets("Sheet1").Cells(IM, 1).Value And CDate(Sheets("Sheet1").Cells(J, 5).Value) < MaxDateCurrentIM Then Rows(J).EntireRow.Delete End If Next J Next IM Application.ScreenUpdating = True End Sub 

Evaluate用于运行Excel函数 – 但Excel不知道什么是graphics和currentim,它们只存在于vba例程中。 你可能需要用excel来理解你的maxif文件,或者用vba代码来做和maxif一样的工作