如何复制过滤的数据而不复制空单元格

时间:2018-08-31 08:31:12

标签: excel vba excel-vba

场景

我有一个具有很多价值的Excel工作表。我正在使用一些宏来过滤这些值。

我需要的

我只需要将过滤后的值从当前工作表复制到另一工作表。我正在通过以下方式

Sub filterCopy()
    Selection.SpecialCells(xlCellTypeVisible).Copy
    Sheets("Sheet2").Select
    Range("A1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
End Sub

问题

上面的代码通过仅复制可见单元格来完成应做的事情。但是问题是,它正在复制包括所有空白单元格在内的整个工作表,直到行号1048480甚至更多。但是我的数据最多只能到第12行。我应该如何只复制包含数据的可见单元格而不复制所有空白单元格?

图片

已过滤工作表 enter image description here 将过滤后的数据复制到另一张纸后 enter image description here

1 个答案:

答案 0 :(得分:1)

您的代码没有考虑垂直空间中的最后一个单元,而是实际上复制了A1范围内的所有内容。

解决方案是第一,避免使用Select,因为它会降低性能,然后再使用

Cells(Rows.Count, "A").End(xlUp).Row

获取A列中的最后一行。这给了我们

Sub filterCopy()
    Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy Sheets(2).Range("A1")
End Sub

要复制包含已过滤行的完整表,请使用

Sub filterCopy()
    Sheets(1).UsedRange.SpecialCells(xlCellTypeVisible).Copy Sheets(2).Range("A1")
End Sub