簡體   English   中英

VBA Excel 2010-刪除不包含基於另一列的列最大值的行

[英]VBA Excel 2010 - Delete Rows without max value of column based in another column

我有一個帶有幾列的excel電子表格,其中兩列有一個ID(重復出現)和一個日期。

我要完成的工作是通過ID刪除所有行,僅保留具有最大日期的行。

我還有第二張紙,上面有所有獨特的即時消息。

這是我目前所擁有的:

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

任何想法都將不勝感激,代碼行不起作用是:

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不知道什么是imrange和currentim,它們僅存在於vba例程中。 您需要用excel可以理解的術語來重寫maxif,或者使用vba代碼來完成與maxif相同的工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM