【问题标题】:Conditional Autofilter over multiple fields in a single autofilter在单个自动过滤器中对多个字段进行条件自动过滤
【发布时间】:2015-06-29 03:11:32
【问题描述】:

我正在为帐户报表宏创建一些编码,并且正在检查是否存在针对多个字段的条件自动过滤器之类的东西,即:

TSOA.Range.AutoFilter Field:=8, Criteria1:="Unpaid", Operator:=xlOr, Field:=9, Criteria2:=">" & Dbl3M

所以我需要未付费或本月后 3 个月内的条目(不相互排斥,因此唯一真正被过滤掉的条目是付费且早于 3 个月前)。因此,必须包含 28/02/2015 之后的任何条目,无论是否付费(我知道这听起来很复杂)。

无论如何,如果这不起作用,我有一些解决方法,方法是按个别标准自动过滤它们,将它们添加到单个数组并删除重复项!我只是想知道自动过滤功能的局限性以及这是否真的可以做到。谢谢。

其工作原理的图示:

所以我任意将截至 2015 年 4 月 14 日的条目设置为“付费”,过滤器按钮最多过滤上个月(5 月 2 日)仅剩下 3 个月的数据,它还必须包括来自旧的“未付费”条目超过 3 个月前,并包括 3 个月内的“付费”条目。

如果能帮助你理解,下面是一些其余的代码:

Private Sub FilterButton2_Click()

Dim Balance As Double
Dim DblMonth As Double

With ThisWorkbook

Set TSOA = .Worksheets("SOA").ListObjects(1)
DblMonth = CLng(DateSerial(Year(Date), Month(Date), 0)) 'integer value of last month last day
Dbl3M = CLng(DateSerial(Year(Date), Month(Date) - 2, 0)) 'integer value of 3 months ago last day

If TSOA.AutoFilter.FilterMode = True Then
    TSOA.AutoFilter.ShowAllData
    TSOA.ListColumns(10).DataBodyRange.ClearContents
    Exit Sub
Else: str3 = InputBox("Please input client initials", "Client filter")
    If Application.WorksheetFunction.CountIf(.Worksheets("SOA").Range("D:D"), str3) = 0 Or str3 = "" Then
    MsgBox "Client cannot be identified!", , "Error"
    Exit Sub
    End If
End If

**ActiveSheet.AutoFilterMode = False
TSOA.Range.AutoFilter Field:=4, Criteria1:=str3
    TSOA.Range.AutoFilter Field:=8, Criteria1:="Unpaid", Operator:=xlOr, Field:=9, Criteria2:=">" & Dbl3M**

For K = 1 To TSOA.ListRows.Count

If Not TSOA.DataBodyRange.Rows(K).Hidden Then
    Balance = Balance + TSOA.DataBodyRange(K, 6).Value
    TSOA.DataBodyRange(K, 10).Value = Balance
End If
Next

End With
End Sub

【问题讨论】:

    标签: excel autofilter vba


    【解决方案1】:

    我认为 AutoFilter 适用于一列(Field:=1 或 Field:=8 等)。它可以接受多个条件,但仅限于每个字段中的值

    另一种解决方案可能是使用公式(如果您可以使用临时列)

    公式:=OR( B2="Unpaid", AND(B2="Paid", A2 < 4) )

    .

    我的日期:1 = 本月,2 = 上个月,等等

    【讨论】:

    • 我解决了这个问题,使用自动过滤器删除付费的,然后在单独的循环中取消隐藏 3 个月内的那些。乏味....但是如果自动过滤器有时在不同的字段上有多个标准会很好:D
    • 你很坚持!做得好。现在我想起来了,交叉过滤器的标准会很有帮助,而不是强迫人们发挥创造力:) 我不确定你是如何实现它的,但其他人可能会觉得它也很有帮助
    • 我会发布我的答案然后:D
    • 请发表你的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多