自动过滤多个条件,但以值开头而不是字符串

自动过滤多个条件,但以值开头而不是字符串

设置如下:我编写了一个 VBA 宏,可以将其应用于从我们的数据库中得出的一份报告,该报告包含图书馆中的所有项目。该宏查看报告,根据我们要查找的杜威编号按起始编号筛选索书号,复制这些结果,然后将它们粘贴到新的工作表上(还有更多操作,但这就是它的要点)。

例如,对于我们的地理结果,宏会查看报告,通过“=91*”过滤索书号列以捕获所有 910、911、912 等索书号。在我们得到多个不连续的数字之前,这种方法一直很有效。我们的纯科学结果需要查看索书号“=50*”、“=52*”和“=57*”。

我的第一个解决方法有效,直到它无效(如下所述):

Worksheets("LAS Report").Activate
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
Worksheets("LAS Report").Range("$A$1").AutoFilter Field:=7, Criteria1:="=50*"
Worksheets("LAS Report").Cells.AutoFilter Field:=6, Criteria1:="<" & Yr5
Selection.CurrentRegion.Select
Selection.Copy

Sheets.Add(after:=Sheets(Sheets.Count)).Name = "PURESCI"
Worksheets("PURESCI").Paste

Worksheets("LAS Report").Activate
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
Worksheets("LAS Report").Range("$A$1").AutoFilter Field:=7, Criteria1:="=52*"
Worksheets("LAS Report").Cells.AutoFilter Field:=6, Criteria1:="<" & Yr5
Selection.CurrentRegion.Offset(1, 0).Resize(Selection.CurrentRegion.Rows.Count - 1).Copy
Worksheets("PURESCI").Activate
lastrow = Range("A" & Rows.Count).End(xlUp).Row + 1
Range("A" & lastrow).PasteSpecial

Worksheets("LAS Report").Activate
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
Worksheets("LAS Report").Range("$A$1").AutoFilter Field:=7, Criteria1:="=57*"
Worksheets("LAS Report").Cells.AutoFilter Field:=6, Criteria1:="<" & Yr5
Selection.CurrentRegion.Offset(1, 0).Resize(Selection.CurrentRegion.Rows.Count - 1).Copy
Worksheets("PURESCI").Activate
lastrow = Range("A" & Rows.Count).End(xlUp).Row + 1
Range("A" & lastrow).PasteSpecial

Set src = Range("A1").CurrentRegion
Set ws = ActiveSheet
ws.ListObjects.Add(SourceType:=xlSrcRange, Source:=src, _
xllistobjecthasheaders:=xlYes, tablestylename:="TableStyleMedium4").Name = "PURESCI"

这确实起了一段时间的作用,直到有一份报告称没有以这些数字开头的电话号码。它不会像处理单一条件结果那样只粘贴标题行并完成操作,而是会复制并粘贴第一个条件“=50*”的标题行,返回并尝试按“=52*”进行筛选,由于这是第二个“批次”,我通常不希望它再次复制并粘贴标题行,它会向下移动一个,但没有结果可向下移动,因此它会复制所有筛选出的行,然后将整个报告粘贴到 PureSci 工作表上。然后它会再次执行此操作,因此将整个报告再次粘贴到底部。

有人可能会在这里找到Selection.CurrentRegion.Offset(1, 0).Resize(Selection.CurrentRegion.Rows.Count - 1).Copy解决问题的方法。但是,我不知道,所以我想,嗯,也许我可以使用多个条件过滤。我需要一种无论是否返回结果都能正常工作的方法。如果我只有两个条件,那就太简单了,但我有三个。然后我查看了一个数组。出于测试目的,我更改了三个呼叫号码以反映 50、52 和 57 呼叫号码,因此通过找到这三个呼叫号码,我就可以知道它是否有效。我试过了:

Worksheets("LAS Report").Range("$A$1").AutoFilter Field:=7, Criteria1:=Array("=50*", "=52*", "=57*"), Operator:=xlFilterValues

但是,没有结果。然后我将 xlFilterValues 更改为 xlOr

Worksheets("LAS Report").Range("$A$1").AutoFilter Field:=7, Criteria1:=Array("=50*", "=52*", "=57*"), Operator:=xlOr

而且它的效果“更好”,因为它现在只返回一个结果,因为它只过滤了最后一个条件“=57*”。我看到网上有人解决了这个问题,当你在寻找字符串或数字时,但如果你试图通过“以 50 开头或以 52 开头或以 57 开头”进行过滤,则没有结果。

有什么建议吗?谢谢!

相关内容