我使用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
是否有更可靠的方法根据列中的唯一记录创建数组?
答案 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承担或承担)。