首页 文章

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

提问于
浏览
1

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

数据集:

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

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

    enter image description here

  • 0

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

  • 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还有其他可以实现的选项 .

  • 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
    

    希望这可能有所帮助 . 最好的祝福,

相关问题