2015-05-14 69 views
1

我需要按照相同的标准过滤,但标准的值在我收到的数据中并不总是相同的,所以它们需要是动态的。动态标准 - 过滤Excel VBA

例如。

Dim crit1 as String crit1 =?

这样:

Selection.AutoFilter字段:= 4,标准1:= 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:=为100101静态但它应该在过滤器中呈现动态值。 在此先感谢。

+0

使用你的宏记录器和过滤数据,使用自定义过滤器和“包含”。然后看看生成的过滤器代码。从那里你会看到它如何使用通配符。 – Davesexcel

+0

嘿我试过了,但它给出了静态值。 – Unicorn

+0

是的,你正在做它看看使用通配符时代码的样子。 – Davesexcel

回答

0

例如, 使用我的宏记录器筛选列“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 
+0

感谢Daveexcel,但是您传递的值即s =“a”不是动态的,我不想在代码中进行更改,而应该自动获取过滤器时出现的值。正如你在我的代码中看到的那样,值Criteria1:=“100”是存在的,如果后来它可能是600,所以我想要的更改。 – Unicorn

+0

再次,我只是向您展示如何在过滤器代码中使用变量。你如何设置这些变量完全取决于你。 – Davesexcel

+0

好的,但这不是解决方案。 – Unicorn