【发布时间】:2011-08-19 04:42:50
【问题描述】:
目前我有一个大约有 200000 多条记录的 Excel,我需要根据一列过滤数据。该列有大约 5 个值,我需要在一张表中过滤掉 2 个值,其余 3 个值保留在同一张表中。
现在不再使用逐个单元格比较来检查单元格的值是否属于上述 2 个值中的任何一个,然后将该行剪切粘贴到另一个工作表中。这不适用于 200k+ 记录,只会挂起。
相反,我计划采用自动过滤方法。我尝试使用“记录宏”功能,但问题是它给了我一些错误,例如
“Excel 无法创建或使用数据范围引用,因为它太复杂了。请尝试以下方法之一 使用可以在矩形中选择的数据 使用同一工作表中的数据"
此外,如何仅将过滤后的值复制粘贴到另一张纸上?如果我尝试直接复制粘贴或特殊粘贴为“值”,那么即使隐藏的行也会被复制粘贴。
下面是我一直在篡改的宏代码
Sub Macro34()
'
' Macro34 Macro
'
'
Rows("1:1").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$T$81335").AutoFilter Field:=6, Criteria1:="=242", _
Operator:=xlOr, Criteria2:="=244"
Cells.Select
Selection.Copy
ActiveWindow.SmallScroll Down:=21
Sheets("Sheet2").Select
ActiveWindow.SmallScroll Down:=-18
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.ClearContents
Range("A1").Select
Sheets("Sheet1").Select
Selection.Copy
Sheets("Sheet2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Sheet2").Select
ActiveWindow.SmallScroll Down:=93
Sheets("Sheet1").Select
ActiveWindow.SmallScroll Down:=-9
ActiveWindow.ScrollRow = 1
Rows("1:1").Select
Application.CutCopyMode = False
Selection.AutoFilter
End Sub
上面可能有一些垃圾代码行,因为它是使用“记录宏”功能生成的。
有人可以帮助我吗?问题是excel中存在的数据量。 excel不能在VBA中处理这么多数据吗?我正在使用 Excel 2007
【问题讨论】:
-
请不要使用
Select。只需在对象上使用方法,例如Rows("1:1").AutoFilter。 -
问题是excel由于未知原因抛出错误...... :(
-
我明白我没有指出问题所在,这就是我留下评论而不是答案的原因。但是您会发现使用更简洁的代码(例如他的答案中使用的变体)更容易找出错误。
-
是的,Lance,对不起,我是 excel VBA 的新手。实际上我使用了下面使用的代码变体,但它仍然抛出相同的错误:((
标签: excel excel-2007 vba