给定条件是一个表格的情况
时间: 2024-03-11 18:48:04 浏览: 10
如果给定的条件是一个表格,你可以先将条件表格存储在一个数组中,然后在筛选数据时循环遍历数组中的每一行,并使用 `Criteria1` 和 `Operator` 参数来设置筛选条件。示例代码如下:
```
Sub FilterData()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1") '替换为你的工作表名
'将条件表格存储在数组中
Dim filterTable As Variant
filterTable = ws.Range("F1:I4").Value '替换为你的条件表格范围
'确定要筛选的数据范围
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row '假设第一列不为空,替换为你的数据范围
'应用筛选
Dim i As Long
For i = LBound(filterTable, 1) + 1 To UBound(filterTable, 1) '从第二行开始循环,跳过表头
Dim filterCriteria As String
Dim filterOperator As XlAutoFilterOperator
filterCriteria = filterTable(i, 2)
filterOperator = GetOperator(filterTable(i, 3)) '根据条件表格中的运算符获取 Operator 参数的值
ws.Range("A1:D" & lastRow).AutoFilter Field:=filterTable(i, 1), Criteria1:=filterCriteria, Operator:=filterOperator
Next i
End Sub
Function GetOperator(operatorString As String) As XlAutoFilterOperator
Select Case operatorString
Case "="
GetOperator = xlAnd
Case "<>"
GetOperator = xlOr
Case ">"
GetOperator = xlAnd
Case "<"
GetOperator = xlAnd
Case ">="
GetOperator = xlAnd
Case "<="
GetOperator = xlAnd
End Select
End Function
```
上述代码中,我们假设要筛选的数据在 Sheet1 工作表中的第一列到第四列,最后一行不为空。条件表格范围为 F1:I4,第一列为要筛选的列号,第二列为筛选条件,第三列为运算符。由于 `Operator` 参数需要传入 `XlAutoFilterOperator` 类型的枚举值,我们编写了一个 `GetOperator` 函数来将条件表格中的运算符转换成枚举值。你可以根据自己的需求修改这些参数。