Excel For loop错误从CSV文件提取数据并将选定数据放入摘要工作表时循环宏上的行

Excel For loop错误从CSV文件提取数据并将选定数据放入摘要工作表时循环宏上的行,excel,vba,Excel,Vba,我是一名供应链分析师,试图在单独的电子表格中汇总每日库存CSV文件。在此电子表格中,列是不同的日期,共有669列。行是我要检查库存的某些项目,共有3019行 我有一个具有两个功能的宏:一个打开csv文件,另一个获取与电子表格中的项目编号匹配的值。我在堆栈溢出上发现了这些函数。我使用while循环遍历列/日期,直到没有更多日期为止。我使用从2到3019的for循环遍历行/项。for循环中还有一个if语句。这将检查第一个和第二个仓库是否有单个库存数据或多个库存条目。在后一种情况下,汇总了两个仓库中相

我是一名供应链分析师,试图在单独的电子表格中汇总每日库存CSV文件。在此电子表格中,列是不同的日期,共有669列。行是我要检查库存的某些项目,共有3019行

我有一个具有两个功能的宏:一个打开csv文件,另一个获取与电子表格中的项目编号匹配的值。我在堆栈溢出上发现了这些函数。我使用while循环遍历列/日期,直到没有更多日期为止。我使用从2到3019的for循环遍历行/项。for循环中还有一个if语句。这将检查第一个和第二个仓库是否有单个库存数据或多个库存条目。在后一种情况下,汇总了两个仓库中相同项目的库存水平。我还共享了我在for循环中使用的函数

Sub SummaryFile ()
Set fso = CreateObject("Scripting.FileSystemObject")

c = 2
While Not (IsEmpty(Cells(1, c).Value))

    For r = 2 To 3019
        If fso.fileexists(filepath) Then
            arr = CsvToArray(filepath)
            Cells(r, c).Value = TestLookup(arr, Cells(r, 1), 2, 3)
        ElseIf fso.fileexists(filepath1) And fso.fileexists(filepath2) Then
            arr1 = CsvToArray(filepath1)
            arr2 = CsvToArray(filepath2)
            Cells(r, c).Value = TestLookup(arr1, Cells(r, 1), 2, 3) + TestLookup(arr2, Cells(r, 1), 2, 3)
        End If
    Next r
Wend
End Sub



Function TestLookup(arr, val, lookincol As Integer, returnfromcol As Integer)
Dim r
r = Application.Match(val, Application.Index(arr, 0, lookincol), 0)
If Not IsError(r) Then
    TestLookup = arr(r, returnfromcol)
Else
    TestLookup = Null 'or some other "error" value
End If
End Function


Function CsvToArray(filepath) As Variant
Dim wb As Workbook
Application.ScreenUpdating = False
Set wb = Workbooks.Open(filepath)
CsvToArray = wb.Sheets(1).Range("A1").CurrentRegion.Value
wb.Close False
End Function

我只想得到每个日期每个项目的库存编号。如果该项目不在当天的库存列表中,则“TestLookup”函数返回空值。当我在少量的行和列上尝试它来测试它时,它是有效的,但是当我在所有需要它的日期和项目上尝试它时。它要么在很长时间后完成宏的运行,并且只在第一列上运行宏,而没有填充任何其他列,要么给出一个错误,表示内存不足。有什么想法吗?

您应该使用Access或SQL Server之类的数据库来完成这样繁重的计算工作。
Excel很适合根据此类软件提供的查询结果显示表格或图形,但不适合处理大量数据,即669*3018=2019042次迭代。

我只是使用python pandas数据帧并合并了它们(类似于SQL join)因此,我根本没有使用循环。

考虑到声明是可以的(您没有声明任何变量),在您的条件中,如果有一个CSV,您将添加,如果有更多,您将再次复制。如果
fso.fileexists(filepath)
为真,则不反对
fso.fileexists(filepath1)和fso.fileexists(filepath2)
,因此您可能复制了两次。您的CSV文件中有多少项?我有1000个文件