使用VBA实现快速多重数据筛选
实例需求:Excel数据表如下图所示,部分无关数据列已经隐藏。
筛选规则:
- 条件1:Col19 列为
Pass
- 条件2:Col7,Col8,Col9,Col10不全部为零
- 提取满足上述两个条件的 Col1 列的数据(即上图中黄色单元格)
Sub Demo()Dim srcSht As Worksheet: Set srcSht = ActiveSheetDim arr: arr = srcSht.Range("A1").CurrentRegion.ValueDim brr: ReDim brr(1 To UBound(arr), 0)Dim i As Long, iR As LongFor i = LBound(arr) + 1 To UBound(arr)If arr(i, 19) = "Pass" ThenIf arr(i, 7) & arr(i, 8) & arr(i, 9) & arr(i, 10) <> "0000" TheniR = iR + 1brr(iR, 0) = arr(i, 1)End IfEnd IfNextIf iR > 0 ThenDim desSht As WorksheetSet desSht = Sheets.Add(After:=srcSht)desSht.Range("A1").Resize(iR).Value = brrEnd If
End Sub
【代码解析】
第2行代码获取活动工作表对象。
第3行代码将数据表加载到数组中。
第4行代码声明数组,用于保存结果。
第6-13行代码循环数据表。
第7行代码判断第19列是否符合筛选条件1。
第8行代码判断第7、8、9、10列是否符合筛选条件2。
如果两个筛选条件都满足,那么第9行代码累加1。
第10行代码提取第1列的值,保存到结果数组中。
第14行代码判断是否有符合筛选条件的数据。
第16行代码创建新工作表。
第17行代码将筛选结果写入新建工作表中。
第8行代码也可以使用如下代码行实现。
If arr(i, 7) * arr(i, 8) * arr(i, 9) * arr(i, 10) <> 0 Then