【问题标题】:Select cells to the left of filtered values - VBA选择过滤值左侧的单元格 - VBA
【发布时间】:2018-08-12 10:48:09
【问题描述】:

我正在做一个项目,我在 CI 列中过滤“否”和“N/A”,如果有任何结果,我想从相应的行复制 A:CD 中的数据。如何选择 A:CD 中的数据?我正在处理 50,000 多行数据,因此任何偏移循环都会大大减慢程序的速度。 End With 之前的最后一行代码肯定是不正确的。

Sub selectdata()

Sheets("Sheet_1").Select
Range("A1:CD1", Range("A1:CD1").End(xlDown)).Copy
Sheets("Sheet_2").Select
ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, 
_
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Range("CE2:CP2").AutoFill Destination:=Range("CE2:CP" & Cells(Rows.Count, 
"D").End(xlUp).Row)

Range("CI1").Select
Selection.AutoFilter Field:=87, Criteria1:=Array( _
    "NO", "N/A"), Operator:=xlFilterValues
With ActiveSheet
If Application.WorksheetFunction.Subtotal(103, .Columns(1)) > 1 _
        Then .Resize(.Rows.Count - 1, 1).Offset(1, -5).xlLeft.Copy

End With
End Sub

谢谢!

【问题讨论】:

    标签: excel vba copy filtering


    【解决方案1】:

    复制 A:CD 中的过滤数据

    With ActiveSheet
    
        With Intersect(.Range("A:CD"), .UsedRange)
            .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).Copy
        End With
    
    End With
    

    【讨论】:

      【解决方案2】:

      试试这个...它不带标题地复制到 CE2。

      你可以通过调整这一行来改变你的过滤器

       filterRange.AutoFilter Field:=87, Field:=87, Criteria1:="=N/A", Operator:=xlOr, Criteria2:="=NO"
      

      代码:

      Option Explicit
      
      Sub selectdata()
      
          Dim sourceWorkbook As Workbook
          Dim sourceSheet As Worksheet
          Dim targetSheet As Worksheet
      
          Set sourceWorkbook = ThisWorkbook
          Set sourceSheet = sourceWorkbook.Worksheets("Sheet1")
          Set targetSheet = sourceWorkbook.Worksheets("Sheet2")
      
          With sourceSheet
      
              Dim lastRow As Long
              lastRow = .Cells(.Rows.Count, "CI").End(xlUp).Row
      
              Dim filterRange As Range
      
              Set filterRange = .Range("A1:CI" & lastRow)
      
              filterRange.AutoFilter
      
              filterRange.AutoFilter Field:=87, Field:=87, Criteria1:="=N/A", Operator:=xlOr, Criteria2:="=NO"
      
              With sourceSheet.AutoFilter.Range
      
                  .Offset(1, 0).Resize(.Rows.Count - 1, 82).SpecialCells(xlCellTypeVisible).Copy targetSheet.Range("CE2")
      
              End With
      
          End With
      
      End Sub
      

      【讨论】:

      • 太棒了!!通过添加零件以将其复制到新工作表中节省了大量时间。 :)
      猜你喜欢
      • 2014-03-14
      • 2017-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多