筛选数据集后选择特定的可见范围

时间:2019-05-02 20:28:15

标签: excel vba

我试图在过滤数据集后复制一个特定的列(不包括标题)。如果过滤后有多行,我选择的范围可以正常工作,并且我可以将该列复制到另一张纸上。但是,如果过滤后只有一行,则当我指定范围时,它将选择所有空单元格以及非空单元格,并且我的代码有故障。如何解决此问题?

我尝试使用不同的范围属性,但无法获得理想的结果

'''Finding the Pack Test Category from the filtered 1st column'''
Set RngA = ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Areas(2)(1, 1)

''Here the selection of range includes all the empty cells as well!
Set RngA = Range(RngA, RngA.End(xlDown)) 

'''Copy & Pasting in the Forecast Sheet for temporary use'''
RngA.SpecialCells(xlCellTypeVisible).Copy Destination:=wbA.ActiveSheet.Range("L1")

我希望仅使用具有数据的可见单元格而不是空单元格来选择范围。

2 个答案:

答案 0 :(得分:0)

如果标题下的第一行是已过滤(可见)单元格的一部分,则无法依靠Areas(2)来工作。

'at this point, AutoFilter has been applied
'I have no idea what the range is
'or what column you are interested in

with ActiveSheet.AutoFilter.Range
    with .cells.resize(.rows.count-1, 1).offset(1, 0)
        set RngA = .SpecialCells(xlCellTypeVisible)
    end with
end with

RngA.copy Destination:=wbA.ActiveSheet.Range("L1")

我不同意您将ActiveSheet用作父工作表引用。源工作表和目标工作表应明确引用。

答案 1 :(得分:0)

假设我们从以下内容开始:

enter image description here

并过滤年龄在45岁以上的人:

enter image description here

我们要将已过滤的列 A 复制到另一张工作表:

Sub KopyOneKolumn()
    Dim r1 As Range
    Dim r2 As Range
    Dim r3 As Range

    Set r1 = ActiveSheet.AutoFilter.Range ' the total visible range
    Set r2 = Intersect(r1.Offset(1, 0), r1) ' clip off the header
    Set r3 = Intersect(r2, Columns(1)) ' pick only column A

    r3.Copy
    Sheets("Sheet2").Paste
End Sub

Sheet2中的结果:

enter image description here

注意:

关键是r1代表自动过滤器表中可见单元的“可复制”块。