Excel VBA筛选和复制粘贴数据

时间:2014-05-15 08:38:19

标签: excel vba excel-vba

给定一个数据集,就是说10列。在A列中我有日期,在B栏中我有%。我想过滤A列仅2014年数据,B列<70%,并将过滤后的数据复制粘贴到另一个工作表中。我如何编写下一行的代码来获取第一行过滤数据?

ActiveSheet.Range("$A$1:$AR$1617").AutoFilter Field:=5, Operator:= _
xlFilterValues, Criteria2:=Array(0, "12/28/2014")
ActiveSheet.Range("$A$1:$AR$1617").AutoFilter Field:=14, Criteria1:="<0.7" _
        , Operator:=xlAnd

2 个答案:

答案 0 :(得分:2)

使用Offset这样的方法:

ActiveSheet.Range("A1:AR1617").Offset(1, 0).SpecialCells(xlCellTypeVisible).Copy 

上面的代码复制了不包括标题的过滤数据 这是你正在尝试的吗?

答案 1 :(得分:0)

ActiveSheet.Range("$A$1:$AR$1617").specialcells(xlcelltypevisible).copy sheets("Sheet2").range("A1")

将可见/已过滤的单元格仅复制到新工作表中作为问题的第一部分。

要获取第一行数据,假设有数据并且您在第1行中有标题,并将其粘贴到新工作表的下一个可用行。

Activesheet.range("A1").end(xldown).entirerow.copy sheets("Sheet2").range("A65536").end(xlup).offset(1,0)

一个循环解决方案,它将数据从sheet1复制到sheet2,前提是A列总是包含数据(在非常大的数据集上会有点慢):

Sub copyFilteredData(ByVal iYear As Integer, ByVal dPercent As Double)
Dim rCell As Range

For Each rCell In Sheet1.Range("A1:A65536").SpecialCells(xlCellTypeConstants)

    If Year(rCell.Offset(0, 4).Value) = iYear And rCell.Offset(0, 13).Value < dPercent Then
        rCell.EntireRow.Copy Sheet2.Range("A65536").End(xlUp).Offset(1, 0)
    End If

Next rCell

End Sub

使用以下方式致电:

copyfilteredData 2014,0.7