VBA宏查找重复项并保持较大的值

时间:2016-02-23 01:07:49

标签: excel vba excel-vba

我有点迷失在哪里开始解决问题。

数据集:

AAA15200    12A    60
AAA15200    12B    60
AAA15200    12C    60
AAA15200    13A    60
AAA15200    13A    70
AAA15200    12A    65

问题:
第1列是产品代码  我需要在第2列中找到每个产品的副本。
如果在第二列中出现重复,我需要转到第3列并找到哪个是较小的值,并删除较小值的行。

所以在上面的数据集中--AAA15200有13A的副本。底部副本有70,大于60,所以我想删除包含60的行 底线也与顶行重复,但底行有65,大于60.所以删除顶行。

然后,行a将更改为新产品代码,该代码需要为其生成相同的代码。 [这是为了工作,如果找不到解决方案,我们将不得不手动完成9,000多行]

4 个答案:

答案 0 :(得分:4)

与您的问题相关,可以通过使用VBA宏或仅使用Excel工作表函数或仅执行如下所述的基本数据操作来完成任务。假设您在A,B和C列中设置了初始数据:

A           B   C
AAA15200    12A 60
AAA15200    12B 60
AAA15200    12C 60
AAA15200    13A 60
AAA15200    13A 70
AAA15200    12A 65

首先,按照降序对C列进行排序,得到以下结果:

A           B   C
AAA15200    13A 70
AAA15200    12A 65
AAA15200    12A 60
AAA15200    12B 60
AAA15200    12C 60
AAA15200    13A 60

然后在列A,B上应用“删除重复项”数据操作以获得最终结果:

A           B   C   
AAA15200    13A 70
AAA15200    12A 65
AAA15200    12B 60
AAA15200    12C 60

希望这可能会有所帮助。最好的问候,

答案 1 :(得分:0)

Alex Bell提出的解决方案是正确的方法。如果这是一个经常重复的过程,那么您可以镜像VBA中描述的方法。

虽然可以通过macro recorder轻松记录此方法供以后使用,但它为Range.Sort method生成的代码非常详细。这应该就是你需要的一切。

with worksheets("Sheet1")
    with .cells(1, 1).currentregion
        .cells.sort key1:=.columns(3), order1:=xldescending
                    orientation:=xltoptobottom, header:=xlyes
        .removeduplicates columns:=array(1, 2), header:=xlyes
    end with
end with

看起来是正确的。检查Range.CurrentRegion property上的文档,确保范围参考符合您的需求。同样,Range.RemoveDuplicates methodRange.Sort method还有其他可以实施的选项。

答案 2 :(得分:0)

输入以下公式作为数组公式(使用Ctrl + Shift + Enter)并填写。 复制粘贴值然后删除TRUE

的行

enter image description here

答案 3 :(得分:0)

将每列从最小到最大排序。 在辅助列中,公式= - ((a1& b1)=(a2& b2)) 过滤辅助列1,仅选择特殊单元格可见单元格,删除每一行。 这与您的示例数据完美匹配。删除2个值中的最小值我怀疑事情可能会更复杂,请告诉我。 祝你有美好的一天。