我有一个170000行的范围。我正在过滤A列中的单个值,并在B列中返回相应的值。
我希望这些值转储到一个数组中,这样我就可以快速将它们扔进一个字典中(键是我过滤了A列的值)。
问题是SpecialCells(xlCellTypeVisible)
表现不一致。
如果我在较小的范围内进行相同的测试,则值会很好地转储到数组中。但是如果范围与我的一样大,它只返回范围中的第一个值。此外,我可以使用相同的行复制到另一张表。我只是无法让它填充数组。
foo = ws1.Range(tbl1Name & "[ID]").SpecialCells(xlCellTypeVisible)
适用于小范围,但只返回与我一样大的范围内的第一个结果(少于50个结果。)foo成为包含所有变量的数组。
ws1.Range(tbl1Name & "[ID]").SpecialCells(xlCellTypeVisible).Copy ws2.Range("A1")
适用于大范围并成功复制所有相关数据。
所以我的问题:在自动过滤大表范围时,如何在没有复制到空白工作表的额外步骤的情况下填充数组? (Excel 2013)
答案 0 :(得分:0)
编辑:需要引用“Microsoft Forms 2.0 Object Library”(应该位于可用引用列表的顶部附近)。或者在项目中添加用户表单,然后自动添加引用(然后可以删除表单...)
这适用于单个列:
Sub Tester()
Dim rng, txt As String, cb As New DataObject, arr
Set rng = ActiveSheet.Range("A2:A28").SpecialCells(xlCellTypeVisible)
rng.Copy
DoEvents
cb.GetFromClipboard
txt = cb.GetText
arr = Split(txt, vbCrLf)
Debug.Print LBound(arr), UBound(arr)
End Sub
如果您有多个列,则需要遍历arr
的每个元素(在选项卡上拆分其值)并将值传输到二维数组。