【问题标题】:How to copy filtered data without copying empty cells如何在不复制空单元格的情况下复制过滤数据
【发布时间】:2018-08-31 08:31:12
【问题描述】:

场景

我有一个包含很多值的 Excel 表。我正在使用一些宏来过滤这些值。

我需要什么

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

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

问题

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

图片

过滤表 将过滤后的数据复制到另一张工作表后

【问题讨论】:

  • Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy Sheets(2).Range("A1") 适合你吗?它至少会摆脱.Select,您应该始终使用avoid
  • 当使用A2:A时,它只是复制A列,因此我需要复制所有过滤的非空单元格。我使用Activesheet.UsedRange.Copy,它似乎工作。但我不确定这是否会导致任何其他问题
  • 是的,我忽略了这一点,请参阅提供的答案来解决该问题。
  • @JvdV 谢谢。正如我在下面的评论中所述,能够解决问题

标签: vba excel


【解决方案1】:

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

解决方案是首先,避免选择,因为它提供低性能,然后使用

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

【讨论】:

  • 其实我不仅需要A列,还需要所有包含值的过滤列。使用Activesheet.UsedRange.Copy有什么问题
  • @Anu 查看更新的答案。 .SpecialCells(xlCellTypeVisible).Copy 适用于任何范围,因此 Sheets(1).UsedRange.SpecialCells(xlCellTypeVisible).Copy 将用于复制整个表(但仅限于可见行)
  • 谢谢。通过结合您和以上人员的评论,我可以在一行中完成工作,如下Sheets("Sheet1").UsedRange.SpecialCells(xlCellTypeVisible).Copy Sheets(2).Range("A1")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
  • 2018-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多