Range.AdvancedFilter产生不一致的结果

时间:2019-07-10 17:27:56

标签: excel vba

我使用VBA,试图根据数据列中的唯一值创建一个单独的工作表数组。

尽管我使用的是相同的数据,但是创建的元素数量将在263(不正确)和268(正确)之间变化。

这些唯一记录是从包含7667个记录(重复)的主列表中提取的。

问题似乎出在我脚本的Range.AdvancedFilter部分中。通常,这将复制正确数量的唯一记录,但是很少会不正确。

无论对脚本进行任何更改,它都将返回这两个结果。我还没有弄清楚如何复制此错误。

发生错误时,筛选列表中缺少主列表中最下面的五个唯一记录。这在错误之间似乎是一致的。

Sub Test()
    Dim aArray() As Variant
    Dim cell As Range
    Dim aRange As Range
    Dim i As Integer

    Worksheets.Add After:=Sheets(1)
    ActiveSheet.Name = "Temporary_1"
    Sheets(1).Activate
    Sheets(1).Range(Range("D1"), Range("D1").End(xlDown)).AdvancedFilter 
    Action:=xlFilterCopy, CopyToRange:=Sheets(2).Range("A1"), Unique:=True
    Sheets(2).Activate

    Set aRange = Sheets(2).Range(Range("A2"), Range("A2").End(xlDown))
    Debug.Print aRange.Count
    ReDim aArray(aRange.Count - 1)
    For Each cell In aRange.Cells
        aArray(x) = cell.Value
        x = x + 1
    Next cell

    i = 0
    For x = LBound(aArray) To UBound(aArray)
        i = i + 1
    Next x
    Debug.Print i

End Sub

是否有更可靠的方法根据列中的唯一记录创建数组?

1 个答案:

答案 0 :(得分:0)

您已使用.End(xlDown),尽管我们不知道您的数据中是否有空格。

您尝试过更改

Sheets(1).Range(Range("D1"), Range("D1").End(xlDown)).AdvancedFilter

阅读:

With Sheets(1)
    lr = .Cells(.Rows.Count, 4).End(xlUp).Row
    .Range(.Range("D1"), .Range("D" & lr)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sheets(2).Range("A1"), Unique:=True
End With

请注意,我还将“工作表”引用添加到了其他范围,因为这样可以适当地限定该范围(第一工作表(1)不会由VBA承担或承担)。