我有一个超过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
。
答案 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)
等等。您也可以将它插入循环中。 希望这会对你有所帮助