我正在尝试维护一份文档列表(见下文),只包含最新版本。
但是,我的文件显示一些文档#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)
答案 0 :(得分:1)
根据您的方案,您可以在没有VBA的情况下执行此操作。假设您的数据位于单元格B2:D10
中,则此方法应该有效:
=MAX($B$2:$B$10*($A$2:$A$10=A2))<>B2
。输入 Ctrl - Shift - 输入并将其复制到D10
TRUE
答案 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