SpecialCells(xlCellTypeVisible)未将所有值都返回到数组(Excel 2013)

时间:2014-11-06 16:52:37

标签: arrays excel autofilter

我有一个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)

1 个答案:

答案 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的每个元素(在选项卡上拆分其值)并将值传输到二维数组。