我有一个包含多个列的Excel电子表格,其中两个有ID(重复自己)和日期。
我想要完成的是按ID删除所有行,只留下具有最大日期的行。
我有一张包含所有独特IM的第二张。
这就是我现在所拥有的:
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""")
答案 0 :(得分:1)
你能试试吗?我想你的公式语法是关闭的。 (还有为什么要设置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
答案 1 :(得分:0)
Evaluate用于运行Excel函数 - 但Excel不知道什么是imrange和currentim,它们只存在于vba例程中。你需要用excel理解的术语重写你的maxif,或者使用vba代码做与maxif相同的工作