【问题标题】:Delete a duplicated line (only if it's the next one!)删除重复的行(仅当它是下一行时!)
【发布时间】:2013-01-14 09:35:40
【问题描述】:

是否可以使用 Excel 2003 中的函数来删除与上一行相同的整行?例如:

  1. 苹果
  2. 苹果
  3. 李子
  4. 苹果
  5. 香蕉
  6. 香蕉
  7. 香蕉
  8. 苹果

我想删除#2、7# 和#8,但我不想删除#5 和#9。仅当它是下一个时,我才想删除重复的条目。我希望我设法让你清楚。 如果没有函数,我怎么能在 VBA 中做到这一点?提前致谢!

【问题讨论】:

    标签: excel vba duplicate-removal


    【解决方案1】:

    如果它是一次性的,你可以在没有 VBA 的情况下通过在下一列中添加一个公式来相当简单 - 假设你的列是 A:

    • 在 B2 中输入以下内容:

      =IF(A1=A2,"DELETE","")
      
    • 向下拖动公式

    • 在两列上添加自动过滤器
    • 过滤 B 列中的“DELETE”
    • 删除所有可见行
    • 删除 B 列

    【讨论】:

    • @molnardenes 自动填充将在几毫秒内完成这项工作,无论数组大小如何。为该解决方案 +1 - 您在这里没有 VBA。好吧,只有当您希望带来复杂性和快乐时)
    【解决方案2】:

    这可能适合,删除所有重复的行(实际上,不仅是单元格数据!),所以请记住,它只能在您使用单列工作表时使用。否则你会丢失一些其他数据。

    Sub Unduplicate()
     Dim prev As String
     Dim sel As Range
     Dim i As Integer
    
     Set sel = Range(Selection, Selection)
     prev = sel.Offset(0).Value     ' set prev as the first value - never will be deleted
     i = 1    ' start from 2nd row
     Do While sel.Offset(i).Value <> "" And sel.Offset(i).Value <> ""
        If sel.Offset(i).Value = prev Then    ' if duplicate - delete row
            sel.Offset(i).EntireRow.Delete
        Else      ' else set new prev, and go further
            prev = sel.Offset(i).Value
            i = i + 1
        End If
     Loop
    End Sub
    

    为您的示例运行此宏后,我得到:

    您可以修改它,将值存储在数组中,然后用记住的数组填充列而不是删除行,但现在应该很容易了。

    【讨论】:

    • 非常感谢!这正是我想要的。
    【解决方案3】:

    只是一个简短的说明...如果要删除整行,请确保从范围的底部开始工作。如果您从范围的顶部向下工作,您可能会得到一些意想不到的结果。您可能还需要考虑清除单元格值然后排序,而不是删除。我会为你写一个例子,但我时间紧迫。如果你卡住了,我可以稍后给你写。

    编辑:

    我的原始答案不一定正确,如下面的 makciook 解决方案所示。过去我错误地以这种方式处理问题(不要将其用作解决方案!!!):

      Sub duplicates()
      Dim c As Range, rng As Range
    
      Set rng = Selection ''Select the entire list before running
    
      For Each c In rng
    
          If c.Value = c.Offset(-1, 0).Value Then c.EntireRow.Delete
    
      Next
    
      End Sub
    

    使用此脚本,一旦删除并向上移动一行,单元格范围就不会重置。因此,运行它不会在您的列表中捕获第二个香蕉副本。作为替代方案,我通常会找到最后一行,然后一直到第一行,以解决发生删除时行向上移动的问题。如果可能的话,我会给自己打-1。

    【讨论】:

      猜你喜欢
      • 2021-11-26
      • 2019-07-25
      • 2021-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-06
      相关资源
      最近更新 更多