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

VBA宏查找重复项并保留较大值,vba,excel,Vba,Excel,我有点不知道从哪里开始解决这个问题 数据集: 问题: 第1列将是产品代码。 我需要在第2列中找到每个产品的副本。 如果第二列中出现重复,我需要转到第3列,找出较小的值,并删除较小值的行 因此,在上述数据集中-AAA15200具有13A的副本。底部的重复项有70,大于60,因此我想删除包含60的行。 底线也和顶行重复,但底行的65大于60。所以,删除第一行 然后,a行将更改为一个新的产品代码,该代码也需要更改。 [这是为了工作,如果找不到解决方案,我们将不得不对9000多行进行手动检查]与您的问

我有点不知道从哪里开始解决这个问题

数据集:

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

因此,在上述数据集中-AAA15200具有13A的副本。底部的重复项有70,大于60,因此我想删除包含60的行。 底线也和顶行重复,但底行的65大于60。所以,删除第一行

然后,a行将更改为一个新的产品代码,该代码也需要更改。
[这是为了工作,如果找不到解决方案,我们将不得不对9000多行进行手动检查]

与您的问题相关,可以使用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

希望这能有所帮助。非常感谢,

与您的问题相关,该任务可以通过使用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
希望这能有所帮助。致以最诚挚的问候,

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

虽然此方法可以很容易地通过记录以供以后使用,但它为生成的代码非常冗长。这就是你所需要的

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
看起来差不多。检查上的文档,确保范围参考将满足您的需要。类似地,和也有可以实现的其他选项。

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

虽然此方法可以很容易地通过记录以供以后使用,但它为生成的代码非常冗长。这就是你所需要的

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

看起来差不多。检查上的文档,确保范围参考将满足您的需要。类似地,和也有可以实现的其他选项。

使用Ctrl+Shift+Enter和fill-down输入以下公式作为数组公式。 复制粘贴值,然后删除带有TRUE的行


使用Ctrl+Shift+Enter和fill down将以下公式作为数组公式输入。 复制粘贴值,然后删除带有TRUE的行


将每列从最小到最大排序。 在助手列中,公式=-a1和b1=a2和b2 筛选1上的“辅助对象”列并选择“特殊单元格”“仅可见单元格”,删除每行。 这对您的示例数据非常有效。删除了2个值中的最小值。我怀疑事情可能更复杂,请告诉我。
祝你今天愉快

将每列从最小到最大排序。 在助手列中,公式=-a1和b1=a2和b2 筛选1上的“辅助对象”列并选择“特殊单元格”“仅可见单元格”,删除每行。 这对您的示例数据非常有效。删除了2个值中的最小值。我怀疑事情可能更复杂,请告诉我。
祝你今天愉快

如果您准备使用一些辅助列,则不需要VBA。尝试了解如何将数据拆分为列,以及如何为Maxif编写数组公式。在你到达的地方发帖,我们可以帮助你修复它。如果你准备使用一些帮助列,你不需要VBA。尝试了解如何将数据拆分为列,以及如何为Maxif编写数组公式。在你到达的地方发帖,我们可以帮你修复。看起来效果很好。有没有办法找出它去除了什么?我很高兴它对你有用。如果您对解决方案感到满意,请将答案标记为已接受。如果您有更多问题,请将它们分别发布到您在评论中提出的问题:有许多不同的方法可以实现这一点,例如使用Excel过滤器,或使用VLOOKUP函数比较原始的兑现地点和最终列表,或使用VBA等。致以最良好的祝愿,似乎效果非常好。有没有办法找出它去除了什么?我很高兴它对你有用。如果您对解决方案感到满意,请将答案标记为已接受。如果您有更多的问题,请将它们分别发布到您在评论中提出的问题:有许多不同的方法可以实现这一点,例如使用Excel Fil
ters或VLOOKUP函数比较原始的某处兑现列表和最终列表,或使用VBA等。最好的是,使用上述代码,是否有方法将删除的行输出到某处以使用它来生成有效数据?否,永久删除重复条目。您正在寻找的可能更接近该方法。然而,这个新的折痕破坏了原始问题的答案,应该作为一个新问题提出,以免成为一个新问题。使用上述代码,有没有办法将删除的行输出到某个地方,以便将其用于有效数据?没有,永久删除重复条目。您正在寻找的可能更接近该方法。然而,这条新的皱纹打破了原来问题的答案,应该作为一个新问题提出,以免成为一个新问题。