【问题标题】:Dynamic Criteria - Filtering Excel VBA动态条件 - 过滤 Excel VBA
【发布时间】:2015-05-14 14:16:13
【问题描述】:

我需要根据相同的条件进行过滤,但条件的值在我收到的数据中并不总是相同,因此它们需要是动态的。

例如。

将 crit1 调暗为字符串 暴击1 = ?

这样:

Selection.AutoFilter Field:=4, Criteria1:=crit1

这是我的代码

enter code herexDim TaskType, Status, Elapse As Long
Dim Total, Completed As Variant
Total = Array("COMPLETED", "ERROR", "KILLED")
Completed = Array("COMPLETED")
TaskType = WorksheetFunction.Match("tasktypeid", Rows("1:1"), 0)
Status = WorksheetFunction.Match("status", Rows("1:1"), 0)
Elapse = WorksheetFunction.Match("elapse", Rows("1:1"), 0)
'Use Filter Criteria
'100 Total
With Sheets("Raw_Data")
Set rnData = .UsedRange
With rnData
.AutoFilter field:=TaskType, Criteria1:="100"
.AutoFilter field:=Status, Criteria1:=Total, Operator:=xlFilterValues
.Select
        For Each rngarea In .SpecialCells(xlCellTypeVisible).Areas
        lcount = lcount + rngarea.Rows.Count
        Next
        a = lcount - 1
   End With
      End With
'100 Completed
    With Sheets("Data")
    Set rnData = .UsedRange
    With rnData
    .AutoFilter field:=TaskType, Criteria1:="100"
    .AutoFilter field:=Status, Criteria1:=Completed, Operator:=xlFilterValues
    .Select
            For Each rngarea In .SpecialCells(xlCellTypeVisible).Areas
            lcount1 = lcount1 + rngarea.Rows.Count
            Next
            b = lcount1 - 1
       End With
          End With

'101 Total
    With Sheets("Raw_Data")
    Set rnData = .UsedRange
    With rnData
    .AutoFilter field:=TaskType, Criteria1:="101"
    .AutoFilter field:=Status, Criteria1:=Total, Operator:=xlFilterValues
    .Select
            For Each rngarea In .SpecialCells(xlCellTypeVisible).Areas
            lcount2 = lcount2 + rngarea.Rows.Count
            Next
            c = lcount2 - 1
       End With
          End With
'101 Completed
    With Sheets("Data")
    Set rnData = .UsedRange
    With rnData
    .AutoFilter field:=TaskType, Criteria1:="101"
    .AutoFilter field:=Status, Criteria1:=Completed, Operator:=xlFilterValues
    .Select
            For Each rngarea In .SpecialCells(xlCellTypeVisible).Areas
            lcount3 = lcount3 + rngarea.Rows.Count
            Next
            d = lcount3 - 1
       End With
          End With

在上面的代码中,我已经静态计算了条件 1:= 为 100,101,但它应该采用过滤器中存在的动态值。 提前致谢。

【问题讨论】:

  • 使用您的宏记录器并过滤数据,使用自定义过滤器和“包含”。然后查看生成的过滤器代码。从那里您将看到它如何使用通配符。
  • 嘿,我试过了,但它给出了静态值。
  • 是的,您这样做是为了查看使用通配符时代码的样子。

标签: vba excel


【解决方案1】:

例如, 使用我的宏记录器为包含“a”的项目过滤列“I”,我会得到这种代码。

Sub Macro5()
'
' Macro5 Macro
'

'
    Columns("I:I").Select
    Selection.AutoFilter
    ActiveSheet.Range("$I$1:$I$7").AutoFilter Field:=1, Criteria1:="=*a*", _
                                              Operator:=xlAnd
End Sub

现在我看到了代码如何使用通配符,我现在可以编辑代码以使用通配符和我的变量。 我的新代码如下所示。

Sub FilterForA()
    Dim s As String
    s = "a"
    Columns("I:I").AutoFilter Field:=1, Criteria1:="=*" & s & "*"
End Sub

【讨论】:

  • 感谢 Daveexcel,但是您传递的值,即 s = "a" 不是动态的,我不想更改代码,而它应该自动采用在筛选。正如您在我的代码中看到的那样,存在值 Criteria1:="100" 如果稍后它可能是 600,那么我想要进行更改。
  • 再次,我只是向您展示如何在过滤器代码中使用变量。如何设置这些变量完全取决于您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
相关资源
最近更新 更多