【问题标题】:Removeduplicates fails to work for arrays with size depending on data rangeRemoveduplicates 无法用于大小取决于数据范围的数组
【发布时间】:2019-03-05 02:49:55
【问题描述】:

下面有两组代码,上面的(作为 cmets)不起作用,而下面的代码起作用。我的目标是从我事先不知道其列数的范围中删除重复项。上面的还应该创建一个类似于 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

【问题讨论】:

  • 使用 (ColArray) 即把 () 环绕它。
  • 我认为问题在于如何从考虑所有列的范围中删除重复项。上面的代码不能按照另一个问题的链接中的说明工作,但是没有代码如何删除所有列的重复项。
  • 鉴于链接的答案不再可行,我已根据编辑取消了投票。请您进行编辑以使问题更清楚。本质上,您现在说的是,如果您在 datarange.Columns.Count() 上使用循环生成数组,然后尝试 datarange.RemoveDuplicates Columns:=(ColArray) 您会收到运行时错误 5 无效过程调用。使用 ColArray = Array(1, 2, 3, 4, 5) 然后使用 atarange.RemoveDuplicates Columns:= ColArray 传递数组时,您不会得到此数组。您可以编辑以完整显示顶部和底部并显示错误消息吗?
  • 尝试添加evaluate,运行流畅,但删除了不是真正重复的行。
  • 请整理问题(如已建议的那样)并添加一些具有预期结果的示例数据。这将使准确回答这个问题更容易。

标签: excel vba duplicates


【解决方案1】:

你需要从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

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

【讨论】:

  • 这成功了!知道为什么使用 1 作为起点不起作用吗?谢谢!我得到的错误是运行时错误 5:无效的过程调用或参数。
  • 嗨@Nick123,我很高兴听到您是否为您工作。据我了解,如果您不声明数组的维度 - 例如Dim ColArray(1 to 5) - 在初始声明语句中,其下限应始终为 0,无论任何后续 redim 语句。这是我根据经验推测的,但可能还有更多。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    相关资源
    最近更新 更多