0

我正在尝试仅包含最新版本的文档列表(见下文)。

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

谁能告诉我如何做到这一点?有比我上面的选择更好的方法吗?

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

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)
4

3 回答 3

1

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

  1. 在 E2 中,放置公式=MAX($B$2:$B$10*($A$2:$A$10=A2))<>B2。输入Ctrl- Shift-Enter并将其复制到D10
  2. 现在应用自动筛选和筛选列 DTRUE
  3. 删除所有行并删除自动过滤器
于 2013-10-15T18:10:56.197 回答
0

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

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

像这样在第 2 行的新列中添加公式

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

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

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

于 2013-10-15T18:08:56.573 回答
0

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

您首先按 Doc 和 Date 排序,然后遍历列表并删除除最新的以外的所有内容:

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
于 2013-10-15T18:21:08.423 回答