Excel VBA筛选和复制粘贴数据
给定一个数据集,可以说10列。 在A列我有date,在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
使用这样的Offset
方法:
ActiveSheet.Range("A1:AR1617").Offset(1, 0).SpecialCells(xlCellTypeVisible).Copy
以上代码复制不包括标题的过滤数据。
这是你想要的吗?
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)
还有一个循环解决scheme,将数据从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