如何在VBA上使用IF条件自动筛选

时间:2018-07-19 14:05:39

标签: excel vba excel-vba if-statement autofilter

我真的是VBA的新手,我陷入了无法在线查看的过滤功能。

我基本上建立了一个登录表单,该表单允许不同的用户登录后在“报告表”上查看不同的数据。在“报告表”中,我有两列“ P”和“ Q”,其中一些名称是报告。

让我们说:

P      Q
User1  User2

Paul   Bob
Martin Martin
Bob    Bob
Tom    Martin
Ralph  Bob

然后我在VBA上使用了以下代码:

Private Sub Worksheet_Activate()

Range("Report!$F$6:$Y$11").CurrentRegion.AutoFilter Field:=12, Criteria1:=Range("G3").Value

End Sub

** G3是名称的参考单元格*

现在,如果我使用该代码登录Bob,结果将是:

P      Q
User1  User2

Paul   Bob
Bob    Bob
Ralph  Bob

那是正确的!但是,如果我尝试用Paul登录,则没有可用的结果,因为他不在Field:= 12(列“ Q”)上。

我想执行以下操作:如果Paul不在“ Q”列上,请停止过滤该列,然后开始过滤“ P”列。

我尝试过:

Private Sub Worksheet_Activate()

If Range("Report!$F$6:$Y$11").CurrentRegion.AutoFilter(Field:=12, Criteria1:=Range("G3").Value) Then 'do nothing

Else
Range("Report!$F$6:$Y$11").CurrentRegion.AutoFilter Field:=11, Criteria1:=Range("G3").Value

End If

End Sub 

但是我真的不知道该说些什么来取得积极的结果。

在此先感谢大家为我提供帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用范围的查找方法查看是否存在

Option Explicit
Public Sub test()
    Dim found As Range
    Set found = Worksheets("Report!").Range("$Q$6:$Q$11").Find(what:=Range("G3").Value, lookat:=xlWhole)

    If Not found Is Nothing Then
        ' Stuff with Field:=12, Criteria1:=Range("G3").Value)
    Else
      ' Stuff with Field:=11, Criteria1:=Range("G3").Value)
    End If
End Sub