我知道复制和粘贴可见单元格方法(如下所示)但是,我希望使用范围= range.SpecialCells(xlVisible)的相同方法。这有可能吗?
Sub tstsa()
Dim lastrow As Long
With Sheets2
lastrow = .Range("Q1048576").End(xlUp).Row
.Range("A1:Q" & lastrow).Cells.SpecialCells(xlVisible).Copy
End With
Sheet8.Range("a1").PasteSpecial xlPasteValues
End Sub
答案 0 :(得分:2)
Range.SpecialCells( xlCellTypeVisible)中的集合是Range.Areas的集合。这类似于您使用.Union不连续细胞所获得的结果。
Sub tstsa()
Dim rws As Long
With Sheet2
With .Cells(1, 1).CurrentRegion.Cells
With .Resize(.Rows.Count, 17)
Debug.Print .SpecialCells(xlCellTypeVisible).Address(0, 0)
Sheet8.Range("a1:q1") = .Rows(1).Cells.Value2
For rws = 2 To .SpecialCells(xlVisible).Areas.Count
Sheet8.Cells(Rows.Count, 1).End(xlUp)(2).Resize(1, 17) = _
.SpecialCells(xlCellTypeVisible).Areas(rws).Cells.Value2
Next rws
End With
End With
End With
End Sub
在您的情况下,区域将是可见的过滤数据行(包括标题)。您需要循环遍历区域并将Range.Value或Range.Value2属性传递到Sheet8以进行直接价值转移。
如果行是连续的,则Area可以包含多行数据。我已离开Debug.Print
,因此您可以在VBE的立即窗口中观察区域集合的地址。