arrays - 用vba中其他数组的内容过滤二维数组的最快方法

标签 arrays excel vba 2d

嗯,我的工作簿中有超过 200.000 行,所以我需要最快的方法来处理这些数据。

我将数据过滤到临时工作表、进行一些计算和删除工作表的更简单的方法需要花费大量时间,所以我认为如果我使用数组,我可以提高效率。

我创建了一个具有动态范围的数组来保存所有数据,并且我在不同的数组(日期)中也有唯一记录,但是我需要循环主数组并过滤日期,所以我可以例如制作一个简单总结当天的结果。 日期在第 3 列中,value_to_sum 在第 6 列中。 我有一个适用于一维数组的代码,但如何让它适用于多字段数组?

f_array = Filter(main_array, "smith")

我只是想获取每一天的值(value)总和

最佳答案

请测试下一个代码。根据独特的日期数组,它会花费更少的时间。只是好奇处理现有数据范围需要多少时间。现在,它在同一张表中返回,从“M2”单元格开始。它可以很容易地适应返回任何地方:

Sub SummarizePerDate()
 Dim sh As Worksheet, lastR As Long
 Dim arr, arrD, arrFin, i As Long, j As Long
 
 Set sh = ActiveSheet 'use here the sheet with the data to be processed
 lastR = sh.Range("A" & sh.Rows.count).End(xlUp).row
 
 arr = sh.Range("A2:G" & lastR).value 'put the data to be processed in an array
 arrD = sh.Range("K2:K9").value       'use here your array of unique date values
                                      'I used this range when tried testing
 ReDim arrFin(1 To UBound(arrD), 1 To 4)

 For i = 1 To UBound(arrD)
    For j = 1 To UBound(arr)
        If arrD(i, 1) = arr(j, 3) Then
            arrFin(i, 1) = arrD(i, 1)
            arrFin(i, 2) = arrFin(i, 2) + arr(j, 5)
            arrFin(i, 3) = arrFin(i, 3) + arr(j, 6)
            arrFin(i, 4) = arrFin(i, 4) + arr(j, 7)
        End If
    Next j
 Next
 sh.Range("M2").Resize(UBound(arrFin), UBound(arrFin, 2)).value = arrFin
 MsgBox "Ready..."
End Sub

关于arrays - 用vba中其他数组的内容过滤二维数组的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66295365/

相关文章:

excel - 使用满足特定条件的单元格创建数据验证列表

vba - 如何在自定义下拉功能区控件上设置所选项目

excel vba - 有效循环二维数组

excel - 复制图像 - Excel VBA

excel - 使用VBA根据Excel中的点名称自动将照片添加到圆环图点

arrays - 如何创建未知大小的多维数组?

javascript - 如何构建一个要转换为 JSON 的 JavaScript 数组?

python - 制作一个 n 列的数组,其中每个连续的行增加一个

javascript - 排序数组超链接

ios - Objective-C 中的 for 循环