繁体   English   中英

使用Excel VBA中的自动筛选器从Excel工作表剪切粘贴数据

[英]Cut Paste data from excel sheet using Autofilter in Excel VBA

当前,我有一个具有大约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中存在的数据量。 Cant Excel无法在VBA中处理这么多数据? 我正在使用Excel 2007

这是您清理的代码:

Sub Macro34()

    ' Turn off autofiltering
    If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False

    ' Turn it back on
    Rows(1).AutoFilter

    ' Set the autofiltering conditions
    Rows(1).AutoFilter Field:=6, _
        Criteria1:="=242", _
        Operator:=xlOr, _
        Criteria2:="=244"

    ' Copy only the relevant range
    Range("A1", _
          Cells(65536, Cells(1, 256).End(xlToLeft).Column).End(xlUp)).SpecialCells(xlCellTypeVisible).Copy

    ' Paste the data into Sheet2 (assuming that it exists)
    Sheets("Sheet2").Range("A1").PasteSpecial xlPasteValuesAndNumberFormats
    Application.CutCopyMode = False

End Sub

关键是SpecialCells部分。

现在,尽管我喜欢一个很好的自动过滤器复制/粘贴,但是当您处理那么多数据时,您可能希望使用ADO,这将允许您使用SQL查询Excel工作表。

此处提供了VBA中ADO的完整概述: http ://www.xtremevbtalk.com/showthread.php?t= 217783

在数据右侧的第一个空白列中,插入一个用于测试您的条件的公式:例如

=if(or(a2=242,a2-244),"Move","Keep")

然后在您的宏中,排序该列设置的整个200,000行数据,然后再尝试过滤并剪切在answer1中描述的可见代码。

这将使数据块被剪切-粘贴为一个连续范围。 这应该绕过“数据范围太复杂”错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM