gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 03:39:35 27 4
gpt4 key购买 nike

嗯,我的工作簿中有超过 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com