首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从CSV文件中提取数据并将所选数据放入摘要工作表时,For循环错误循环通过宏上的行

从CSV文件中提取数据并将所选数据放入摘要工作表时,For循环错误循环通过宏上的行
EN

Stack Overflow用户
提问于 2019-10-02 20:55:03
回答 2查看 25关注 0票数 0

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

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

代码语言:javascript
复制
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“函数返回Null。当我在少量的行和列上尝试它来测试它时,它是有效的,但当我在所有日期和项目上尝试它时,我需要它。它要么在很长一段时间后完成宏的运行,并且只在第一列上运行宏,而其他列都没有填充,要么给出一个错误,指出内存不足。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-25 01:15:33

我最终使用了python、pandas、dataframe,并将它们合并(类似于SQL join),所以我根本不需要使用循环。

票数 0
EN

Stack Overflow用户

发布于 2019-10-02 21:05:26

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58201959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档