如何从Excel VBA中自动筛选的给定范围中复制某些特定列?

时间:2017-07-20 11:44:12

标签: excel vba excel-vba

我有一个超过71列的数据集。在源表(RAS(Offshore))上将自动过滤器应用到目标工作表(Dst)后,我只需要从中复制7列。使用Excel VBA将C,D,G,M,AH,BD,BP上的过滤器应用于RAS(Offshore)后,我需要复制的列为Dst

我成功应用了自动过滤器并复制了整个范围,但我无法如上所述提取特定列。请帮忙。

    FilterCriteria = InputBox("What text do you want to filter on?", _
                           "Enter the filter item.")

    My_Range.AutoFilter Field:=34, Criteria1:="=" & FilterCriteria
    My_Range.AutoFilter Field:=7, Criteria1:="=Freshers/TSS"

    With My_Range.Parent.AutoFilter.Range

    Set rng = .Offset(1, 0).Resize(.Rows.Count, .Columns.Count) _
                  .SpecialCells(xlCellTypeVisible)

        If Not rng Is Nothing Then
            'Copy and paste the cells into DestSh below the existing data
            rng.Copy
            With DestSh.Range("A" & LastRow(DestSh) + 1)
                .PasteSpecial Paste:=8
                .PasteSpecial xlPasteValues
                .PasteSpecial xlPasteFormats
                Application.CutCopyMode = False
            End With
          End If

请建议如何从C,D,G,M,AH,BD,BP对象中复制rng

2 个答案:

答案 0 :(得分:3)

您可以使用Intersect将副本限制为特定列(请参阅下面的代码)。另请注意,在应用.Copy时,您无需使用.SpecialCells(xlCellTypeVisible),因为Copy方法仅会自动应用于可见单元格。

以这种方式尝试:

With My_Range
  .AutoFilter Field:=34, Criteria1:="=" & FilterCriteria
  .AutoFilter Field:=7, Criteria1:="=Freshers/TSS"
  Intersect(.Offset(1), .Parent.Range("C:C,D:D,G:G,M:M,AH:AH,BD:BD,BP:BP")).Copy

  With DestSh.Range("A" & lastrow(DestSh) + 1)
    .PasteSpecial xlPasteColumnWidths
    .PasteSpecial xlPasteValues
    .PasteSpecial xlPasteFormats
  End With
  .AutoFilter
End With

答案 1 :(得分:0)

如果您已过滤范围,则可以通过以下方式使用“复制”模式: 使用 xlCellTypeVisible 语句,您只能将Filterd值复制到新工作表。

Dim intLastRow as Integer
With Worksheets("Tabelle1")
intLastRow = .Cells(.Rows.Count, "C").End(xlUp).Row
end with
    Worksheets("Tabelle1").Range("C1:C" & intLastRow).SpecialCells(xlCellTypeVisible).Copy _
                            Destination:=Worksheets("Tabelle2").Cells(1, 1)


    Worksheets("Tabelle1").Range("D1:D" & intLastRow).SpecialCells(xlCellTypeVisible).Copy _
                            Destination:=Worksheets("Tabelle2").Cells(1, 2)

等等。您也可以将它插入循环中。 希望这会对你有所帮助