基于过滤器的数组切片
Array slicing based on filter
我正在尝试按特定列过滤 20000 行和 70 列的数组。如果第 14 列中的值为 "Hard",我想将整行复制到另一个数组。我想出了一个非常简单的实现并尝试使用它但是 Excel 每次都没有响应最终崩溃了。然后我在循环中添加了 DoEvents,这样 excel 就不会崩溃。我的代码现在看起来如下。如果社区可以帮助我优化它,那将有很大帮助。现在花太多时间了。
是否有其他一些函数可以用来对数组进行切片,而不是索引,这样可以更快地工作?
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
解决方案
按 Hard/Soft 列(降序或升序)对原始工作表 中的项目进行排序。如果由于某种原因无法排序,请将原始工作表复制到新工作表。
找到 Hard/Soft 项结束的行 - 只需用 COUNTIF
计算硬或软的数量,以先到者为准,并为 Hard
和 Soft
项目
获取所需的单元格范围 FROM
和 TO
使用wsCopyTo.Range("A[FROM]:BR[TO]").Value
简单的复制Hard
和Soft
的部分到数组arr_Hard
和数组 arr_Hard
我正在尝试按特定列过滤 20000 行和 70 列的数组。如果第 14 列中的值为 "Hard",我想将整行复制到另一个数组。我想出了一个非常简单的实现并尝试使用它但是 Excel 每次都没有响应最终崩溃了。然后我在循环中添加了 DoEvents,这样 excel 就不会崩溃。我的代码现在看起来如下。如果社区可以帮助我优化它,那将有很大帮助。现在花太多时间了。
是否有其他一些函数可以用来对数组进行切片,而不是索引,这样可以更快地工作?
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
解决方案
按 Hard/Soft 列(降序或升序)对原始工作表 中的项目进行排序。如果由于某种原因无法排序,请将原始工作表复制到新工作表。
找到 Hard/Soft 项结束的行 - 只需用
COUNTIF
计算硬或软的数量,以先到者为准,并为Hard
和Soft
项目 获取所需的单元格范围 使用
wsCopyTo.Range("A[FROM]:BR[TO]").Value
简单的复制Hard
和Soft
的部分到数组arr_Hard
和数组arr_Hard
FROM
和 TO