使用 Excel VBA 应用过滤器复制数据

问题描述 投票:0回答:2

我注意到使用 Range.Copy 和 Range.SpecialCells(xlCellTypeVisible).Copy 给出了相同的结果,我不太明白为什么,两者到底有什么区别?

举个简单的例子: 如果我有如下电子表格(来自 A1:C6)

A B C
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5

如果我过滤掉3,那么可见数据变成:

A B C
1 1 1
2 2 2
4 4 4
5 5 5

当我试图复制上述数据并应用过滤器到另一个范围时,我测试了以下两种方法结果相同,只复制了过滤掉“3”的数据,但为什么? 方法一:

Range("A1:C6").Copy
Range("A10").PasteSpecial xlPasteValues

方法二:

Range("A1:C6").SpecialCells(xlCellTypeVisible).Copy
Range("A10").PasteSpecial xlPasteValues

从直观上看,这两个比较,只有第二个应该排除不可见的过滤掉的数据,但第一个似乎应该包括所有数据,包括不可见的数据。 现在他们的结果说他们是一样的,如果他们是一样的,那么区别是什么?

谢谢大家!

excel vba filter copy paste
2个回答
0
投票

尝试手动复制范围 - 你只会得到过滤后的单元格
从 VBA 代码 Excel 的行为方式与您手动执行的方式相同
如果你想获得完整的细胞块,最简单的方法 - 停用过滤器
如果这种方式不可接受,您可以循环复制每个单元格的值,但这是低效的方式
设置 rng=Range("A1:C6")
对于来自 rng do
的每个单元格 ...
下一个单元格


0
投票
Private Sub CommandButton1_Click()
   Dim v As Variant, r As Range, dest As Range
   Set r = Me.Range("A1:C6")  'filtered range to copy
   v = r
   Set dest = Me.Range("D10").Resize(r.Rows.CountLarge, r.Columns.CountLarge)
   dest = v
End Sub

按下按钮的结果

© www.soinside.com 2019 - 2024. All rights reserved.