在VBA中筛选不同列中的多个条件,包括string和date

我有两列,即“状态”和“完成date”。 我想在“ 状态”列中首先筛选“打开”和“closures”,然后在“ 结束date”列中筛选“1/0/1900”。

为此我写了下面的代码:

Dim LR As Long LR = Range("A" & Rows.Count).End(xlUp).Row With ActiveSheet .AutoFilterMode = False .Range("A1:A" & LR).AutoFilter Field:=1, Criteria1:=Array( _ "OPEN", "CLOSED"), Operator:=xlFilterValues .Range("A1:A" & LR).AutoFilter Field:=2, Criteria1:=Array(0, "1/0/1900"), Operator:= _ xlFilterValues End With 

但是这不起作用。 起初,我得到错误(范围类的自动过滤方法失败1004)。 然后我错误地删除了第一行With语句(.AutoFilterMode = False),我没有得到任何错误。 但是,filter没有返回任何结果。

我认为我的datefilter有问题,因为状态列filter工作较早。 所以我研究和编写了下面的datefilter的代码,但又不起作用。

 Dim dDate As Date Dim strDate As String Dim lDate As Long, LR As Long LR = Range("A" & Rows.Count).End(xlUp).Row dDate = DateSerial(1900, 1, 0) lDate = dDate ActiveSheet.Range("A1:A" & LR).AutoFilter Field:=2, Criteria1:=">=" & lDate, _ Operator:=xlAnd, Criteria2:="<" & lDate + 1 

请帮助让这两个filter工作。

提前致谢。

你搞砸了一点点

尝试这个

 Sub Test() With ActiveSheet '<--| reference your sheet .AutoFilterMode = False '<--| remove any existing filtering With Range("B1", .Cells(.Rows.count, 1).End(xlUp)) '<--| reference its range in columns A:B from row 1 down to column A last not empty row .AutoFilter Field:=1, Criteria1:=Array("OPEN", "CLOSED"), Operator:=xlFilterValues '<--| filter on referenced range 1st column with "OPEN" or "CLOSED" values .AutoFilter Field:=2, Criteria1:="1/0/1900" '<--| filter on referenced range 2nd column with "1/0/1900" value End With End With End Sub 

顺便说一句你最好用ActiveSheetreplace一些Worksheets("mySheetName") (你把“mySheetName”改成实际的表名),因为依赖于ActiveSheet可能会误导

TarunS,看起来就像在Range()中只select一列(列A),但是试图在两列中应用filter。 我已经创build了Excel工作表,其中列A是“状态”,列B是“完成date”,我可以创buildfilter,你用下面的代码解释:

 Dim LR As Long LR = Range("A" & Rows.Count).End(xlUp).Row With ActiveSheet .AutoFilterMode = False .Range("A1:B" & LR).AutoFilter Field:=1, Criteria1:="=CLOSED", _ Operator:=xlOr, Criteria2:="=OPEN" .Range("A1:B" & LR).AutoFilter Field:=2, Criteria1:="1/0/1900" End With 

请注意,列A和列B中的项目数量相同,我使用的是Excel 2010.请告诉我,如果您仍然遇到任何代码问题。

我认为你的数据就像下面这样

 column A Column B Status Finish Date OPEN 1/0/1900 CLOSED 1/0/1900 OPEN 1/0/1900 CLOSED 1/0/1900 OPEN 1/0/1904 CLOSED 1/0/1905 OPEN 1/0/1906 CLOSED 1/0/1907 OPEN 1/0/1908 CLOSED 1/0/1909 OPEN 1/0/1910 CLOSED 1/0/1911 OPEN 1/0/1900 CLOSED 1/0/1900 OPEN 1/0/1900 CLOSED 1/0/1900 OPEN 1/0/1900 CLOSED 1/0/1900 OPEN 1/0/1905 OPEN 1/0/1906 CLOSED 1/0/1906 OPEN 1/0/1906 CLOSED 1/0/1906 OPEN 1/0/1906 CLOSED 1/0/1906 OPEN 1/0/1906 CLOSED 1/0/1906 OPEN 1/0/1906 x 1/0/1906 y 1/0/1906 Z 1/0/1906 A 1/0/1906 b 1/0/1906 

您可以在列C中键入公式(在C2单元格中)

= IF(AND((OR(A2 =“open”,A2 =“Closed”)),B2 =“1/0/1900”),“Yes”,“No”)

将此公式拖到最后一行(列A或B的最后一行)

它会给你如下输出:

 Status Finish Date Result OPEN 1/0/1900 Yes CLOSED 1/0/1900 Yes OPEN 1/0/1900 Yes CLOSED 1/0/1900 Yes OPEN 1/0/1904 No CLOSED 1/0/1905 No OPEN 1/0/1906 No CLOSED 1/0/1907 No OPEN 1/0/1908 No CLOSED 1/0/1909 No OPEN 1/0/1910 No CLOSED 1/0/1911 No OPEN 1/0/1900 Yes CLOSED 1/0/1900 Yes OPEN 1/0/1900 Yes CLOSED 1/0/1900 Yes OPEN 1/0/1900 Yes CLOSED 1/0/1900 Yes OPEN 1/0/1905 No OPEN 1/0/1906 No CLOSED 1/0/1906 No OPEN 1/0/1906 No CLOSED 1/0/1906 No OPEN 1/0/1906 No CLOSED 1/0/1906 No OPEN 1/0/1906 No CLOSED 1/0/1906 No OPEN 1/0/1906 No x 1/0/1906 No y 1/0/1906 No Z 1/0/1906 No A 1/0/1906 No b 1/0/1906 No 

那么你可以很容易地将栏c上的filter设置为“Yes”条件,或者如果要复制数据,则将filter设置为“yes”

并使用该代码来复制数据

range(“A2:C1048576”)。specialcells(xlcellTypeVisible).copy Destination:= Range(“D2”)