【发布时间】:2017-10-20 18:34:35
【问题描述】:
我有一个宏,它根据另一个电子表格中的原始数据填充电子表格。
每行的主要排序方法是按车道(起点到终点)。每个泳道的结果按周进一步排序。我需要删除每个车道的重复周数,同时保留最后一个结果。
设置类似这样:(抱歉格式化)
A B
LANE A WEEK 38
LANE A WEEK 39
LANE A WEEK 40
LANE A WEEK 41
LANE A WEEK 42
LANE A WEEK 39
LANE A WEEK 40
LANE A WEEK 41
LANE A WEEK 42
LANE A WEEK 39
LANE B WEEK 38
LANE B WEEK 39
LANE B WEEK 40
我发现以下代码非常适合单车道
Dim Rng As Range, Dn As Range, n As Long
Dim Lst As Long, nRng As Range
Lst = Range("B" & Rows.Count).End(xlUp).Row
With CreateObject("scripting.dictionary")
.CompareMode = vbTextCompare
For n = Lst To 1 Step -1
If Not .Exists(Range("B" & n).Value) Then
.Add Range("B" & n).Value, Nothing
Else
If nRng Is Nothing Then
Set nRng = Range("B" & n)
Else
Set nRng = Union(nRng, Range("B" & n))
End If
End If
Next n
If Not nRng Is Nothing Then nRng.EntireRow.Delete
End With
但由于它仅删除基于周或 B 列的重复项,因此将删除所有车道 B。
编辑:
最终结果应该是这样的
A B
LANE A WEEK 38
LANE A WEEK 39
LANE A WEEK 40
LANE A WEEK 41
LANE A WEEK 42
LANE B WEEK 38
LANE B WEEK 39
LANE B WEEK 40
这是一组示例数据的屏幕截图
在第 5 行,有 ATL6 车道的重复数据。随后是CMH1。我需要删除同一车道内的重复周,保留车道的最后更新。就我目前的代码而言,它只关注星期。所以所有的ATL6数据都被删除了,只剩下CMH1了。
对于 ATL6 通道,我需要保留第 6-9 行,并将第 2-5 行作为重复项删除。这需要适用于所有情况,而不仅仅是专门针对这些行。
【问题讨论】:
-
要清楚。什么是最终结果? (请更新原始问题)。例如,在您的示例日期中,车道 A 将有两行:第 38 周和第 39 周,还是只有第 39 周?
-
更新,重申更新。电子表格的每次更新(每天更新一次)将为每个车道添加 4 个条目。这些遵循一年中的几周,以 4 周的价差进行。因此,当前表格中的每条车道都有第 39-42 周(大约 15 周左右)。因此,预期的结果是车道 a 为 4 周,车道 b 为 4 周,依此类推。这将无限期地每天更新,因此周数会随着时间的推移而增加
-
为什么不直接使用“数据”选项卡下的排序功能,然后按 B 列删除重复项?用宏记录这样做
-
我需要保留最新的数据,所以最后一行重复数据应该是保留的,这就是我发布的代码 sn -p 完成的。但是,我需要考虑 A 列中的内容。我在原始帖子中发布了一个屏幕截图,可以更好地说明我需要什么
-
然后将以前的数据存储在单独的工作表中并将当前数据保留在主工作表中?不幸的是,除非您将合并的数据(删除重复项后)存储在不同的工作表上,否则您要完成的任务听起来几乎是不可能的编辑:我不应该说不可能,而是一项不必要的任务