根据最新日期删除Excel行

时间:2013-10-15 17:56:41

标签: excel vba

我正在尝试维护一份文档列表(见下文),只包含最新版本。

但是,我的文件显示一些文档#s有多个转速。我需要能够为每个文档一次性删除旧转的行。一种选择是以某种方式使用每个文档#的发布日期进行比较。仅保留具有最新发行日期的行。

任何人都可以告诉我该怎么做?有没有比我上面的选择更好的方法?

仍然以excel vba开始,但可以很快理解。我的原始列表有大约4000行,所以解决这个问题将是最有帮助的。 THX ...杰夫

Doc    Rev    Issue Date  
A      6      5-Oct-2013  
A      5      1-Sep-2013     (Delete)  
A      4      1-Jun-2013     (Delete)  
B      1      3-Oct-2013  
B      0      4-Jul-2013     (Delete)  
C      3      1-Oct-2013  
C      2      9-Sep-2013     (Delete)  
C      1      8-Aug-2013     (Delete)  
C      0      6-Jun-2013     (Delete)

3 个答案:

答案 0 :(得分:1)

根据您的方案,您可以在没有VBA的情况下执行此操作。假设您的数据位于单元格B2:D10中,则此方法应该有效:

  1. 在E2中,放置公式=MAX($B$2:$B$10*($A$2:$A$10=A2))<>B2。输入 Ctrl - Shift - 输入并将其复制到D10
  2. 现在为TRUE
  3. 应用自动筛选和筛选列D.
  4. 删除所有行并删除autoFilter

答案 1 :(得分:0)

首先制作一份工作簿的保存副本!

假设您的标题位于第1行,而您的数据从第2行开始,而文档位于A列...

在第2行的新列中添加公式,如下所示

=IF(A2=A1,"(Delete)","")

不要将该公式复制到该行。要删除的行将具有“(删除)”工作。如果数量很少,只需手动删除即可。如果有更多,请继续阅读。

下一部分很有趣,请复制该列并将SPECIAL作为VALUES粘贴到另一个新列中。按此排序,您的删除将一起选择作为范围和删除。

答案 2 :(得分:0)

我喜欢Peter的解决方案作为非VBA方式。如果您想使用VBA,那么以下工作。

首先按文档和日期排序,然后遍历列表并删除除最近的所有内容之外的所有内容:

Sub GetLatestVersion()
    Dim data As Range, i As Integer

    Set data = Range("A1:C9") //Change appropriately
    data.Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("C1"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

    For i = data.Rows.Count To 2 Step -1
        If Range("A" & i - 1) = Range("A" & i) Then
            Range("A" & i - 1).EntireRow.Delete Shift:=xlUp
        End If
    Next i
End Sub