我要查找的单号有几千个,分布在大约300个EXCEL文件里,EXCEL文件名和单号没有联系性(这样只能逐个文件去找了吧)
我的思路是这样的:建立一个三维数组,把所有EXCEL文件里的内容(最多2000行,六列)的内容全部一次性读入数组中,再建立三个FOR循环,第一个FOR逐个处理需查找的单号,第二个FOR逐个读取文件(第一维),第三个FOR在每个文件里逐个对比单号(第二维),符合后,返回第三维,在建立数组读取内容这一步,处理很快,大约五秒钟,但是在返回行号,并根据行号读取数据这一步,相当慢,一个单号大约要处理半秒左右
是不是我的思路有问题,我字典不太会用
代码基本上是这样的:
For h = 2 To ActiveSheet.UsedRange.Rows.Count ' 从第一个单号开始查找
For p = 1 To .FoundFiles.Count '从第一个文件开始查找
Set wb = GetObject(arr(p))
For i = 1 To wb.Sheets(ssheet).UsedRange.Rows.Count '从第一行开始查找
If Cells(h, 2) = dharr1(p, i, 6) Then '如果找到
GetCellValue dharr1, h, i, p '返回所在文件所在行号的相应数据
p = .FoundFiles.Count '并且,第一个单号的查找到此为止,直接进入第二个单号查找
Exit For
End If
Next
Next p '从第二个文件中查找
Next h '开始查找第二个单号
大神们,帮帮忙,谢谢了
我的代码有两个问题,第一个,太慢,第二个,文件数不能太多,否则内存溢出
不知道有没有更快的方法
以上回答你满意么?
挨个文件查找的代码我也做过,更慢
不能一次性把所有文件读入内存。会造成速度慢,内存溢出
而应该是每次只处理一个文件
思路是(不会用字典就不用字典,不过代码会长一点)
1、建立一个空数组 用于存放结果
2、建立一个临时数组,用于存放当前处理文件中的结果
3.建立一个循环逐个处理每个文件,把单号放到临数组中
4、修改结果数组下标,把临时数组的内容放进去
5、释放临时数组
关闭文件
6、处理下一个文件本回答被网友采纳