Make a new column without duplicates VBA?

后端 未结 4 1135
无人及你
无人及你 2021-01-07 08:18

I have a column of cells whose values are something like this:

a
a
b
b
c
c
c
c
d
e
f
f

etc.

I\'m looking to take the non-duplicate

4条回答
  •  执笔经年
    2021-01-07 08:45

    Depending on which version of Excel you are using, you can use some built-in Excel functionality to obtain what you want- the whole solution depends on your level of skill with VBA.

    Excel 2003:

    You can use the Advancedfilter method (documentation) of your range to obtain the unique values and copy them to your target area. Example:

    With ActiveSheet
        .Range("A1", .Range("A1").End(xlDown)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("B1"), Unique:=True
    End With
    

    Where B1 is the first cell of the column you wish to copy the unique values to. The only problem with this method is that the first row of the source column ("A1") will be copied to the target range even if it is duplicated. This is because the AdvancedFilter method assumes that the first row is a header.

    Therefore, adding an additional code line we have:

    With ActiveSheet    
        .Range("A1", .Range("A1").End(xlDown)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("B1"), Unique:=True
        .Range("B1").Delete Shift:=xlShiftUp
    End With
    

    Excel 2007 / 2010:

    You can use the same method as above, or use the RemoveDuplicates method (documentation). This is similar to the AdvancedFilter method, except that RemoveDuplicates works in-place, which means you need to make a duplicate of your source column and then perform the filtering, for example:

    With ActiveSheet
        .Range("A1", .Range("A1").End(xlDown)).Copy Destination:=.Range("B1")
        .Range("B1", .Range("B1").End(xlDown)).RemoveDuplicates Columns:=1, Header:=xlNo
    End With
    

    The final parameter Header controls whether the first cell of the source data is copied to the destination (if it's set to true then the method similarly to the AdvancedFilter method).

    If you're after a "purer" method, then you can use a VBA Collection or dictionary - I am sure that someone else will offer a solution with this.

提交回复
热议问题