excel - 使用 .rows(y).value = .rows(x).value 复制行时,Excel 内存不足
问题描述
基本上我想将某些行复制到另一个工作表。为此,我在循环中使用这些行:
For i = 2 To lRow
Select Case ws.Cells(i, 1).Value
Case "00"
Case "01"
Case "02"
Case "03"
Case Else
wsNew.Rows(rowCounter).Value = ws.Rows(i).Value
rowCounter = rowCounter + 1
End Select
Next i
在此之前是一个只复制某些行的大选择语句。ws 是我原来的工作表,wsNew 是我的新工作表,rowCounter 只是帮助知道我填写了多少 wsNew lRow 是我的工作表中的行数,
我只想将落入 else 的行复制到新工作表中。
因为我只做 .Value = .Value 我根本不明白它是如何使用 ram 的,因为我认为 .Value = .Value 实际上只是对该行使用 ram 并立即被垃圾收集。
该代码适用于从 2 到 100 的 i,但我正在使用的数据有 ~23000 行。在大约 21000 行之后,我用完了 32 位 excel 的内存。
使用 64 位 excel 不是一个选项 atm。
解决方案
我几乎 100% 确定您不需要复制整个 excel 行 - 包括所有可能的列,甚至是空白列。
试一试:
For i = 2 To lRow
Select Case ws.Cells(i, 1).Value
Case "00"
Case "01"
Case "02"
Case "03"
Case Else
Dim lastColumn as Long
lastColumn = ws.Cells(i,ws.Columns.Count).End(xlToLeft).Column
wsNew.Cells(rowCounter,1).Resize(1,lastColumn).Value = ws.Cells(i,1).Resize(1,lastColumn).Value
rowCounter = rowCounter + 1
End Select
Next i
推荐阅读
- python-3.x - 如何从不完全为空的列表中删除字典?
- unix - 用于检查单词是否存在然后替换单词 else 保持原样的 Unix 命令
- laravel - 错误:调用字符串上的成员函数 storeAs()
- swift - 如何以编程方式访问视图控制器的故事板 ID
- nginx - Kubernetes Ingress 上的上游超时(110:连接超时)
- firebase - 如何为不同的用户制作firebase的数据库
- jmeter - jMeter汇总结果中的org.apache.http.conn.HttpHostConnectException错误是什么意思?
- python - Python:检测父线程是否调用了exit()
- java - 由于“线程中的异常“AWT-EventQueue-0”java.lang.UnsupportedOperationException:尚不支持,我的程序无法读取密钥。”
- javascript - 如何将数据推送到嵌套数组中的子数组?