【问题标题】:Excel VBA How to Remove all the Duplicate rows based on column CExcel VBA如何删除基于C列的所有重复行
【发布时间】:2018-03-07 21:12:33
【问题描述】:

我是 Excel vba 的新手,我想在这里做的是, 根据 C 列中的值删除所有重复行。因此,只要 c 列具有重复值,它将删除整行。到目前为止我有这个

Sub RemoveDupe()
Dim rCell As Range 
Dim rRange As Range 
Dim lCount As Long 

Set rRange = Range("C1", Range("C" & Rows.Count).End(xlUp)) 
lCount = rRange.Rows.Count 

For lCount = lCount To 1 Step -1 
    With rRange.Cells(lCount, 1) 
        If WorksheetFunction.CountIf(rRange, .Value) > 1 Then 
            .EntireRow.Delete 
        End If 
    End With 
Next lCount 
End Sub

但这里是第一个值,我也想删除那个值。只有没有任何重复或唯一的行将保留。 有什么帮助吗?

【问题讨论】:

  • 为什么不使用“数据”菜单中的“删除重复项”?我认为将同一个变量用于两个不同的事物并不是一个好习惯。
  • 您是说要删除所有包含重复数据的行,还是只删除没有重复数据的行?您的第一段和最后一段似乎有冲突。
  • @BerticusMaximus - 确实如此,“没有任何重复”或“唯一”!

标签: vba excel


【解决方案1】:

稍微不同的方式;它首先为重复的单元格着色,然后删除每个着色单元格的行。

Sub test()
Dim rng1 As Range
Dim lRow As Long
Dim i As Long

lRow = Range("C" & Rows.Count).End(xlUp).Row
Set rng1 = Range("C2", Cells(Rows.Count, "C").End(xlUp))

    For Each cell In rng1
        If WorksheetFunction.CountIf(rng1, cell.Value) > 1 Then
            cell.Interior.ColorIndex = 6
        End If
    Next cell

    For i = lRow To 2 Step -1
        If Cells(i, 3).Interior.ColorIndex = 6 Then
            Rows(i).Delete
        End If
    Next
End Sub

【讨论】:

    【解决方案2】:
    Range("A1:D10").CurrentRegion.RemoveDuplicates Columns:=Array(3), Header:=xlYes
    

    将删除所选范围内的所有行,第三列中有重复值

    【讨论】:

      【解决方案3】:

      这样的东西应该适合你:

      Sub tgr()
      
          Dim ws As Worksheet
          Dim rCheck As Range
          Dim rDel As Range
      
          Set ws = ActiveWorkbook.ActiveSheet
      
          For Each rCheck In ws.Range("C1", ws.Cells(ws.Rows.Count, "C").End(xlUp)).Cells
              If WorksheetFunction.CountIf(ws.Columns("C"), rCheck.Value) > 1 Then
                  If Not rDel Is Nothing Then
                      Set rDel = Union(rDel, rCheck)
                  Else
                      Set rDel = rCheck
                  End If
              End If
          Next rCheck
      
          If Not rDel Is Nothing Then rDel.EntireRow.Delete
      
      End Sub
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-16
        • 2013-06-13
        • 1970-01-01
        • 2017-04-05
        • 2016-05-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多