首页 文章

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

提问于
浏览
0

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

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

Code(snipped)我到目前为止:

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

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

    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
    
  • 0

    这是你在说什么?它检查 Headers 列“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
    

相关问题