【发布时间】:2020-07-12 01:32:27
【问题描述】:
基本上我想将某些行复制到另一个工作表。 为此,我在循环中使用这些行:
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。
【问题讨论】:
-
i、lRow 和 rowCounter 声明为什么?
-
展示您的“大选择语句”以及如何制作“某些行”的副本。
-
不要复制整行 - 只复制到最后一列。
-
我添加了我的选择语句,我仍然不明白 wsNew.Rows(rowCounter).Value = ws.Rows(i).Value 是如何使用任何内存的。没有这条线,它可以完美地工作,而无需使用更多的内存,而不仅仅是打开工作簿。
-
不要在循环中复制/粘贴。使用过滤器或联合,以便您可以一次复制/粘贴所有内容。