VBA复制并粘贴到AutoFilter的另一张纸上,输出一行
我有一个AutoFilter
,一旦它被应用,它总是输出row
。 我想copy
这一row
并paste
到另一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
该代码也处理多行后过滤。
让我们知道这是否有帮助。