删除可变数量的列中的重复项

时间:2018-05-28 03:00:59

标签: excel vba excel-vba

我有以下代码,可以从3列中删除重复项。

Sub RemoveDuplicates()
'
' RemoveDuplicates Macro
'
' Keyboard Shortcut: Ctrl+Shift+Q
'

    Intersect(Selection.EntireColumn, ActiveSheet.UsedRange).RemoveDuplicates _
        Columns:=Array(1,2,3), _
        Header:=xlNo

End Sub

问题出在Array(1, 2, 3) - 我想要匹配Selection.Columns.Count的列数,即如果有1列是Array(1),或者有4列是Array(1, 2, 3, 4) {1}},所以我需要能够动态构建它。

我已经尝试构建一个Long的数组,将其复制到Variant并执行Split(Join(...)),但是将这些传递给方法会给我一个错误:

Run-time error  '5':
Invalid procedure call or argument

使用Array()函数似乎是唯一有效的参数,但我无法动态构建它。

2 个答案:

答案 0 :(得分:2)

  

列数组需要传递byval而不是byref

使用 arrCols 而不是arrCols

Sub Test()

    Dim rng         As Range
    Dim lCtr        As Long

    Dim arrCols()
    Dim arrTemp

    Set rng = Sheet2.Range("A1:C11")
    arrTemp = Split("1,2", ",")

    ReDim arrCols(0 To UBound(arrTemp))

    For lCtr = LBound(arrTemp) To UBound(arrTemp)
        arrCols(lCtr) = arrTemp(lCtr)
    Next

    '/ VBA needs the array to be passed by value. Use (arrCols), notice the parenthesis!
    rng.RemoveDuplicates Columns:=(arrCols), Header:=xlYes

End Sub

答案 1 :(得分:0)

只需从代码中省略Array(1, 2, 3)。对我有用

ActiveSheet.Range(Cells(1, 1), Cells(lastRow, lastCol)).RemoveDuplicates , Header:=xlYes