基于过滤器的数组切片

时间:2015-06-26 12:06:14

标签: arrays excel vba filter slice

我正在尝试按特定列过滤20000行和70列的数组。如果第14列中的值为" Hard",我想将整行复制到另一个数组。我想出了一个非常简单的实现并尝试使用它,但Excel最终每次崩溃都没有响应。然后我在循环中添加了DoEvents,以便excel不会崩溃。我的代码现在看起来如下。如果社区可以帮助我优化它会有很大帮助。现在花了太多时间。

我是否可以使用其他一些功能来切割数组,而不是Index,哪个会更快?

Dim arr_all() As Variant
Dim arr_Hard(1 To 20000) As Variant
Dim arr_Soft(1 To 20000) As Variant
Dim arr_Travel() As Variant



arr_all = wsCopyTo.Range("A2:BR20000").Value
m = 1
n = 1
For i = LBound(arr_all) To UBound(arr_all)

    DoEvents

    Select Case arr_all(i, 14)

        Case "Hard"

            arr_Hard(m) = Application.Index(arr_all, i)
            m = m + 1

        Case "Soft"

            arr_Soft(n) = Application.Index(arr_all, i)
            n = n + 1

    End Select


Next i

1 个答案:

答案 0 :(得分:0)

解决方案

  1. 按硬/软列(desc或asc)排序原始工作表中的项目。如果由于某种原因无法排序,请将原始工作表复制到新工作表。

  2. 找到硬/软项目结束的行 - 只需使用COUNTIF计算硬或软的数量,以先到者为准,然后获取所需的单元格范围{ {1}}和FROM TOHard项目

  3. 使用Soft 只需将wsCopyTo.Range("A[FROM]:BR[TO]").ValueHard的部分复制到数组Soft和数组{{1} }

相关问题