我正在为一个帐户宏创建一些代码宏,我正在检查是否存在多个字段上的条件自动过滤器这样的事情,即:
TSOA.Range.AutoFilter Field:=8, Criteria1:="Unpaid", Operator:=xlOr, Field:=9, Criteria2:=">" & Dbl3M
所以我需要的是未付款或本月3个月内的条目(不是互相排斥的,因此唯一真正过滤掉的条目是3个月前支付的款项)。因此,必须包括2015年2月28日之后的任何有偿或无偿的条目(我知道这听起来很复杂)。
无论如何,如果这不起作用,我可以通过个别标准自动过滤它们,将它们添加到单个阵列并删除重复项,从而获得了一些解决方法!我只想知道autofilter函数的局限性以及是否可以实现这一点。谢谢。
说明其运作方式:
所以我随意截至2015年4月14日作为"付费",过滤按钮过滤最多只有3个月的数据从上个月(5月2日),它还必须包括& #34;未付"超过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
答案 0 :(得分:2)
我认为AutoFilter适用于一列(字段:= 1,或字段:= 8等)。它可以接受多个条件,但仅限于每个字段中的值
另一个解决方案可以是公式(如果你可以使用临时列)
公式:=OR( B2="Unpaid", AND(B2="Paid", A2 < 4) )
我的日期:1 =本月,2 =上个月等