VBA复制并粘贴到AutoFilter的另一张纸上,输出一行

我有一个AutoFilter ,一旦它被应用,它总是输出row 。 我想copy这一rowpaste到另一Sheet

我曾考虑过:

  • xlCellTypeAllValidation但它抛出一个error
  • xlCellTypeSameValidation有许多validation条件一个AutoFilter
  • xlCellTypeLastCell但它给出了过滤row最后一个cell的位置

我怎样才能做到这一点?

这里是我的code摘录:

 With ThisWorkbook.Sheets(k).Range("A1:AZ1") .Value = .Value .AutoFilter field:=1, Criteria1:=Rev_1 .AutoFilter field:=11, Criteria1:=Beginnings(k) .AutoFilter field:=12, Criteria1:=End_Instnts(k) For zz = 13 To last_Field .AutoFilter field:=zz, Criteria1:="" Next zz .SpecialCells(xlCellTypeLastCell).Select .Range.Select ThisWorkbook.Sheets(k).AutoFilterMode = False End With 

我build议testing,以确保事实上符合条件之前,复制 – 像这样的:

 With ThisWorkbook.Sheets(k).Range("A1").CurrentRegion.Resize(, 52) .Value = .Value .AutoFilter field:=1, Criteria1:=Rev_1 .AutoFilter field:=11, Criteria1:=Beginnings(k) .AutoFilter field:=12, Criteria1:=End_Instnts(k) For zz = 13 To last_Field .AutoFilter field:=zz, Criteria1:="" Next zz ' make sure there are results matching filter If .Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then ' offset and resize to avoid headers then copy .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets("other sheet").Range("A1") End If ThisWorkbook.Sheets(k).AutoFilterMode = False End With 

您可以select所有过滤的区域,然后复制它,它只会复制可见的行。 或者将它与.SpeciallCells(xlCellTypeVisible)

Smthng like(after With With)(假设数据从第2行开始)

 Range("A2:AZ1").Copy Destination:=PasteRange 

一种方法是仅使用针对可见细胞的特殊细胞。 一个非常快速和无痛的变体是只使用偏移量。

请参阅以下内容:

 Sub CopyFilterResult() Dim WS1 As Worksheet, WS2 As Worksheet With ThisWorkbook Set WS1 = .Sheets("Sheet1") Set WS2 = .Sheets("Sheet2") End With 'Apply your filters here. WS1.UsedRange.Offset(1, 0).Copy WS2.Range("A1") End Sub 

截图:

来源(带filter):

在这里输入图像说明

结果:

在这里输入图像说明

有些东西可以作为替代品。

让我们知道这是否有帮助。

编辑:

这个代码是根据交换意见。 阅读评论并修改它以适应您的需求。

 Sub CopyAfterFilterMk2() Dim WS1 As Worksheet, WS2 As Worksheet Dim RngBeforeFilter As Range, RngAfterFilter As Range Dim LCol As Long, LRow As Long With ThisWorkbook Set WS1 = .Sheets("Sheet1") Set WS2 = .Sheets("Sheet2") End With With WS1 'Make sure no other filters are active. .AutoFilterMode = False 'Get the correct boundaries. LRow = .Range("A" & .Rows.Count).End(xlUp).Row LCol = .Range("A1").End(xlToRight).Column 'Set the range to filter. Set RngBeforeFilter = .Range(.Cells(1, 1), .Cells(LRow, LCol)) RngBeforeFilter.Rows(1).AutoFilter Field:=1, Criteria1:="o" 'Set the new range, but use visible cells only. Set RngAfterFilter = .Range(.Cells(2, 1), .Cells(LRow, LCol)).SpecialCells(xlCellTypeVisible) 'Copy the visible cells from the new range. RngAfterFilter.Copy WS2.Range("A1") 'Turn off the filter. .AutoFilterMode = False End With End Sub 

该代码也处理多行后过滤。

让我们知道这是否有帮助。