VBA Excel复制范围来自已自动过滤的范围

时间:2017-09-19 20:16:40

标签: excel vba excel-vba

我有一个包含数据的工作表。只要特定列中的某些内容发生更改,我就希望将此工作表中一列的值复制到另一个工作表,但只能复制符合某些条件的行。所以我已经自动过滤了一个范围。这有效。它只返回与过滤器匹配的行。但是从这个过滤范围,我只需要一列。不知怎的,我不能让这个工作。

所以我的问题是,如何才能从过滤范围中复制特定列?

代码(剪掉)我到目前为止:

Me.AutoFilterMode = False
With Me.Range("C4:D103")
    .AutoFilter Field:=2, Criteria1:="=Marge Only", Operator:=xlOr, Criteria2:="=Contracting"
    .SpecialCells(xlCellTypeVisible).Copy Destination:=ThisWorkbook.Worksheets("Result").Range("B5:B104")
End With

ThisWorkbook.SortResult

On Error Resume Next
    Me.AutoFilterMode = False
    Me.ShowAllData
On Error GoTo 0

.SpecialCells(xlCellTypeVisible).Copy部分将太多数据复制到目标工作表。我需要这样的东西:

.Range("A:A").SpecialCells(xlCellTypeVisible).Copy 

使用.Range(" A:A"),我的想法是只复制已过滤范围中的A列。但这并不奏效。

那么你的建议如何实现呢?

2 个答案:

答案 0 :(得分:0)

这是你在说什么?它检查列" I"对于标准,然后它找到过滤器中的第一个和最后一个单元格" A"列并复制两者之间的值并将其粘贴到" O"

列中
Sub copyColumn()
Dim StrRow As Long
Dim str As String
Dim str2 As String
Dim str3 As String
 With Sheet1
  .AutoFilterMode = False
   With .Range("A1:M1")
    .AutoFilter
    .AutoFilter Field:=9, Criteria1:="dog"
    StrRow = Sheets("Sheet1").AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Cells(1, 2).Row
    str = .Range("A" & StrRow).Address
    str2 = .Range("A1").End(xlDown).Address
    .Range("O2:O" & str3).Value = .Range(str, str2).Value
    End With
    End With
End Sub

答案 1 :(得分:0)

您可以稍微修改代码以仅复制所需的列。此代码假定列A(但您可以调整),并假设第4行是标题数据(您也可以调整。

With Me
    .Range("C4:D103").AutoFilter Field:=2, Criteria1:="=Marge Only", Operator:=xlOr, Criteria2:="=Contracting"
    .Range("A5:A103").SpecialCells(xlCellTypeVisible).Copy Destination:=ThisWorkbook.Worksheets("Result").Range("B5")
End With