2017-08-13 56 views
0

我的问题是,我想过滤掉不同列的表中的特定值,我试图记录宏,但记录功能似乎只支持选择特定的值,而不是取出。如何过滤出多个条件的VBA

例如,如果列中填满了事先不知道的每周数据,我想确定一个特定的类别不在那里。如果工作表每周填充数据,并且列标题如公司,产品,编号,制造日期,经理姓名和全部。

从公司栏目我想要拿出“ABC公司”,“FAST公司”,“WIN公司”,而不必知道列表中的其他公司的名称。我也想拿出一些产品,如“电脑”,“手机”,“笔记本电脑”,“SIM卡”。宏观中的记录功能似乎只是说要保留什么,而不是要拿走什么。除了我想要过滤的3家公司之外,我必须选择每家公司。

请帮我看看使用多个标准过滤掉VBA的代码。

我试过这个代码

ActiveSheet.Range("$A$1:$G$24").AutoFilter Field:=2, Criteria1:="<>ABC ccompany", _ 
Operator:=xlAnd, Criteria2:="<>WIN company", Operator:=xlAnd, Criteria3:="<>FAST ltd" 

但我正在逐渐“运行时错误1004”。我觉得标准方法只允许两个标准中的时间。

任何帮助将是伟大的。

+0

可以肯定的是......在你的例子中,当你应该是“ABC公司”(我假设)时,你有“ABC ccompany”(错字错误)。从这个板子看看这篇文章。 (https://stackoverflow.com/questions/29413433/vba-autofilter-text-filters-with-multiple-criteria-of-begin-with) – Mitch

+0

对不起,这是一个错字error.My数据库是正确的 – DIVYA

回答

0

解隐藏线本身:

Option Explicit 

Sub hide_values(Company As Variant, Product As Variant) 
    On Error GoTo hell 

    Dim myList As ListObject, myLine As Range, myValues As Variant 
    Set myList = Me.ListObjects(1) ' assuming you have just one table on your page 
    For Each myLine In myList.DataBodyRange.Rows 
     myValues = myLine.Value 
     myLine.EntireRow.Hidden = False 
     If myValues(1, 1) = Company Then 
      myLine.EntireRow.Hidden = True 
     End If 
     Else If myValues(1, 2) = Product Then 
      myLine.EntireRow.Hidden = True 
     End If 
    Next myLine 

    End 
hell: 
    Debug.Assert False 
    Resume 
End Sub 

Sub test_it() 
    ActiveSheet.hide_values "FAST ltd", "computer" 
End Sub 

这sollution是不完整的,因为它仅排除一个公司和一个产品,但它可以通过使一组字符串的每一个,并通过这些组循环进行扩展。

0

作为AutoFilter的替代方法,我从@ Gary的学生处找到了这个来隐藏或显示表单上的整个行。非常简单和容易修改。

Sub ThreeWay() 
Dim rng As Range, r As Range 
Set rng = Range("A2:A25") 

    For Each r In rng 
    v = Left(r.Value, 1) 
     If v = "A" Or v = "D" Or v = "M" Then 
      r.EntireRow.Hidden = False 
     Else 
      r.EntireRow.Hidden = True 
     End If 
    Next r 
End Sub 
+0

这就是我在** Sollution隐藏线自己**。我的版本(在我提到的扩展之后,但没有详细说明)更灵活,但是您的版本更容易,因此更适合于DYVIA,我会说。 –

0

Solluction设置过滤器

Sub hide_values(Company As Variant, Product As Variant) 
    On Error GoTo hell 

    Dim myList As ListObject, myLine As Range, myValues As Variant 
    Set myList = Me.ListObjects(1) ' assuming you have just one table on your page 
    myList.Range.AutoFilter Field:=1, Criteria1:="<>" & Company 
    ' , Operator:=xlAnd, Criteria2:="<"&OtherCompany 

    myList.Range.AutoFilter Field:=1, Criteria1:="<>" & Product 
hell: 
    Debug.Assert False 
    Resume 
End Sub 

Sub test_it() 
    ActiveSheet.hide_values "FAST ltd", "computer" 
End Sub 

这sollution是不完整的,因为它仅排除一个公司和一个产品。将其扩展到排除两个产品和公司是显而易见的(请参阅注释代码),但进一步扩展是需要完全不同的代码来设置过滤器。 (请告诉我是否需要我详细说明。)

此选项的优点是:用户在子例程运行后保持对选择的控制。