【问题标题】:VBA to filter values based on Two Criteria wherein Header column keeps on changingVBA根据两个标准过滤值,其中标题列不断变化
【发布时间】:2016-07-01 21:23:27
【问题描述】:

在 VBA 中,我记录了下面的代码,其中 Col E = "Currency" & Col B = "Policy"..

它应该做的是..

  1. 列标题“货币”和“政策”都在不断变化,因此应通过名称自动找到它们。..
  2. Col Currency 应过滤为“USD”,Col 策略应过滤为“Willis PCard”,而不是将过滤结果复制到命名为“P Card -”的新工作表中
  3. Col Currency 应过滤为“USD”,Col 政策应过滤为“Willis”和“Willis Re”,两者都应复制到命名为“US -”的新工作表中

`

Sub Filter()    
'
' Filter Macro
'
'

Rows("1:1").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$R$337").AutoFilter Field:=5, Criteria1:="USD"
ActiveSheet.Range("$A$1:$R$337").AutoFilter Field:=2, Criteria1:= _
"Willis PCard"
Cells.Select
Selection.Copy
Sheets.Add After:=Sheets(Sheets.Count)
Sheets("Sheet1").Name = "P Card - "
ActiveSheet.Paste
Sheets("ProcessorReportsList").Select
Application.CutCopyMode = False
ActiveSheet.Range("$A$1:$R$337").AutoFilter Field:=2, Criteria1:="=Willis" _
, Operator:=xlOr, Criteria2:="=Willis RE"
ActiveSheet.Range("$A$1:$R$337").AutoFilter Field:=18, Criteria1:="<>"
Cells.Select
Selection.Copy
ActiveWindow.SmallScroll ToRight:=1
Sheets.Add After:=Sheets(Sheets.Count)
Sheets("Sheet2").Select
Sheets("Sheet2").Name = "US on Hold - "
ActiveSheet.Paste
Sheets("ProcessorReportsList").Select
Application.CutCopyMode = False
ActiveSheet.Range("$A$1:$R$337").AutoFilter Field:=18, Criteria1:="="
Cells.Select
Selection.Copy
Sheets.Add After:=Sheets(Sheets.Count)
Sheets("Sheet3").Select
Sheets("Sheet3").Name = "US - "
ActiveSheet.Paste
Cells.Select
Cells.EntireColumn.AutoFit
Sheets("US on Hold - ").Select
Cells.Select
Cells.EntireColumn.AutoFit
Sheets("P Card - ").Select
Cells.Select
Cells.EntireColumn.AutoFit
Range("A1").Select
Sheets("ProcessorReportsList").Select
Cells.Select
Cells.EntireColumn.AutoFit
Application.CutCopyMode = False
Selection.AutoFilter

End Sub

但是,result 似乎出乎意料

任何帮助将不胜感激。

【问题讨论】:

  • 既然你已经记录了整个工作步骤,我打算在黑暗中试一试,说你是 VBA 新手?如果是这样,我确实建议您查看一些 VBA 指南/课程 [homeandlearn.org/] 是一个很好的起点,在此站点上代码审查也会很好,因为它适用于已经有效但您想要改进它的代码(注意- 仅适用于工作代码使用代码审查),随着您的改进,我认为您将帮助本网站和其他网站上的其他人!

标签: vba excel filter macros


【解决方案1】:

在下面查看一种更简洁的方式来执行您想要的操作。请注意,它仅适用于 USD 和“Willie PCard”,您需要对其进行编辑以用于任何其他 AutoFilter 等。

 Sub FilterAndCopy()

      Dim DataWorkBook As Workbook
      Set DataWorkBook = ThisWorkbook

      Dim DataWorkSheet As Worksheet
      Set DataWorkSheet = DataWorkBook.Sheets("ProcessorReportList")

      Dim FirstRowRange As Range
      Dim CurrencyColumn As Long
      Dim PolicyColumn As Long

      Set FirstRowRange = DataWorkSheet.Rows(1).Find("Currency")
      CurrencyColumn = FirstRowRange.Column

      Set FirstRowRange = DataWorkSheet.Rows(1).Find("Policy")
      PolicyColumn = FirstRowRange.Column

      FirstRowRange.AutoFilter Field:=CurrencyColumn, Criteria1:="USD"
      FirstRowRange.AutoFilter Field:=PolicyColumn, Criteria1:="Willis PCard"

      DataWorkSheet.UsedRange.Copy

      Dim PCard9Sheet As Worksheet
      Set PCard9Sheet = DataWorkBook.Sheets.Add(After:=DataWorkBook.Sheets("ProcessorReportList"))
      PCard9Sheet.Name = "P Card - 9"

      PCard9Sheet.Paste

 End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 2014-03-17
    • 2018-10-18
    • 1970-01-01
    • 2021-10-17
    • 2019-11-14
    相关资源
    最近更新 更多