【问题标题】:Excel VBA Delete Duplicate RowsExcel VBA 删除重复行
【发布时间】:2017-06-21 21:44:20
【问题描述】:

我有一个看起来很简单但很荒谬的问题,但重复项并没有被删除。我有下面的代码应该引用一行与另一行,如果行之间的所有内容都相同,我希望删除重复项。不是代码出错了,只是没有删除行。

With Sheets("PR0Perf")
    lastrow = Cells(Rows.Count, "B").End(xlUp).Row
    Set rng = Range("A1:T" & lastrow)
    rng.RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 _
    , 14, 15, 16, 17, 18, 19), Header:=xlYes
End With

就好像它未能突出显示工作表上的所有单元格。有谁知道问题可能是什么?我可以粘贴整个脚本,但它很长。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    假设您尝试从名为“PR0Perf”的工作表中删除重复项,而不是从 ActiveSheet 中删除,请限定您的 Range、Cells 和 Rows 对象:

    With Sheets("PR0Perf")
        lastrow = .Cells(.Rows.Count, "B").End(xlUp).Row
        Set rng = .Range("A1:T" & lastrow)
        rng.RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 _
        , 14, 15, 16, 17, 18, 19), Header:=xlYes
    End With
    

    注意:代码仅检查 A:S 列中的重复项。这意味着 T 列中的值将适用于为 A:S 中的每个唯一组合找到的第一行。

    【讨论】:

    • 你说得对,我正在尝试从工作表 PR0Perf 中删除所有重复项。当您说限定范围、单元格和行对象时,我不确定我是否完全理解您在说什么。每次宏运行时,行数都是动态的,这就是我使用 lastrow 的原因。也许我过于复杂了,我可以运行一个宏来删除整个工作表中的所有重复项。这甚至可能吗?
    • 原来我是个白痴,并试图删除过滤表上的重复项。一旦我做了一个 if then 来删除该过滤器,它现在就可以完美地工作了。
    • @GregHerr 限定Range 等引用是指(例如)Range("A1:T" & lastrow) 被解释为ActiveSheet.Range("A1:T" & lastrow) 的事实,即它适用于当时处于活动状态的任何工作表.如果您想专门对“PR0Perf”表做某事,您应该使用Sheets("PR0Perf").Range("A1:T" & lastrow),这就是我的答案和问题中的代码之间的区别。 (我利用你有一个With Sheets("PR0Perf") 块的事实,它允许我多次使用. 快捷方式而不是Sheets("PR0Perf").。)
    【解决方案2】:

    我试图从具有过滤器的工作表中删除重复项。一旦我在运行上述代码之前将宏设置为删除过滤器,我的问题就消失了。感谢反馈团队!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2019-01-16
      • 1970-01-01
      • 2015-08-16
      • 2019-12-10
      相关资源
      最近更新 更多