Excel RemovedUpplicates无法用于大小取决于数据范围的阵列

Excel RemovedUpplicates无法用于大小取决于数据范围的阵列,excel,vba,duplicates,Excel,Vba,Duplicates,下面有两组代码,上面的代码(作为注释)不起作用,而下面的代码起作用。我的目标是从我事先不知道列数的范围中删除重复项。上面的一个也应该创建一个类似于array(1,2,3,4,5)的数组。你知道为什么底部的那个有效而顶部的无效吗?提前谢谢!(先前粘贴了错误的代码块。) 我得到的错误是运行时错误5:过程调用或参数无效 Sub RemoveDup(datarange As Range) Dim ColArray() As Variant Dim i As Integer '

下面有两组代码,上面的代码(作为注释)不起作用,而下面的代码起作用。我的目标是从我事先不知道列数的范围中删除重复项。上面的一个也应该创建一个类似于array(1,2,3,4,5)的数组。你知道为什么底部的那个有效而顶部的无效吗?提前谢谢!(先前粘贴了错误的代码块。)

我得到的错误是运行时错误5:过程调用或参数无效

Sub RemoveDup(datarange As Range)

    Dim ColArray() As Variant
    Dim i As Integer

'    ReDim ColArray(1 To datarange.Columns.Count())
'
'    For i = 1 To datarange.Columns.Count()
'        ColArray(i) = i
'    Next i

    ColArray = Array(1, 2, 3, 4, 5)

    datarange.RemoveDuplicates Columns:=(ColArray), _
        Header:=xlNo

End Sub

您需要从0开始构建阵列。。。详情如下:

Dim datarange As Range
Dim ColArray() As Variant
Dim i As Integer

Set datarange = Range("A1:E6")
ReDim ColArray(0 To datarange.Columns.Count() - 1)

For i = 0 To datarange.Columns.Count() - 1
    ColArray(i) = i + 1
Next i

datarange.RemoveDuplicates Columns:=(ColArray), Header:=xlNo

注意:我刚刚将范围输入为范围(“A1:A6”),但您可以指定任何您想要的内容。

这是我的版本,作为参数化子版本,并使用

Sub RemoveDup(datarange As Range)
' removes duplicate taking all columns into account
Dim i As Long
Dim varItems() As Variant
    With datarange
        ReDim varItems(0 To .Columns.Count - 1)
        For i = 1 To .Columns.Count
            varItems(i - 1) = i
        Next i
        .RemoveDuplicates Columns:=(varItems), Header:=xlNo
    End With
End Sub

使用(ColArray)即在其周围放置()。我认为问题在于如何在考虑所有列的情况下从范围中删除重复项。上面的代码没有在其他问题的链接中解释的那样有效,但是没有代码如何删除所有列的重复项。由于链接答案不再可行,我已经取消了投票。请你编辑一下,让问题更清楚。实际上,您现在说的是,如果使用datarange.Columns.Count()上的循环生成数组,然后尝试datarange.RemovedUpplicates Columns:=(ColArray)您将得到运行时错误5无效过程调用。当使用ColArray=array(1、2、3、4、5)然后使用atarange.removedupplicates列:=ColArray传递数组时,您不会得到此数组。是否可以编辑“请”以完整显示顶部和底部,并显示错误消息?尝试在“评估”中添加,运行平稳,但删除了不完全重复的行。请整理问题(如已建议的),并添加一些具有预期结果的示例数据。这将使准确回答这个问题变得更容易。这很有效!你知道为什么用1作为起点是行不通的吗?谢谢我得到的错误是运行时错误5:无效的过程调用或参数。您好@Nick123,很高兴听到您的建议。据我所知,如果在初始声明语句中未声明数组的维度(例如Dim ColArray(1到5)),则其下限应始终为0,而不考虑后续的任何redim语句。根据我的经验,我推测可能还有更多。