Excel 自动筛选-动态更改筛选条件

Excel 自动筛选-动态更改筛选条件,excel,vba,Excel,Vba,我有一个和这个链接一样的问题- 我已通过链接,但无法获得所需的输出 我已经在Sheet1(我们可以根据需要更改)中的一个列值(例如:第10列)上显示了筛选条件,现在根据第10列中根据筛选条件显示的数据,我想在sheet2上使用表1中的数据进行筛选 我已经看到,它们中的许多都使用数组中的静态值,如图所示,但是如何自动筛选sheet1中动态更改的值和Sheet2中的筛选值呢。请告知 .AutoFilter字段:=10,准则1:=Array(“value1”,“value2”),运算符:=xlFi

我有一个和这个链接一样的问题-

我已通过链接,但无法获得所需的输出

我已经在Sheet1(我们可以根据需要更改)中的一个列值(例如:第10列)上显示了筛选条件,现在根据第10列中根据筛选条件显示的数据,我想在sheet2上使用表1中的数据进行筛选

我已经看到,它们中的许多都使用数组中的静态值,如图所示,但是如何自动筛选sheet1中动态更改的值和Sheet2中的筛选值呢。请告知


.AutoFilter字段:=10,准则1:=Array(“value1”,“value2”),运算符:=xlFilterValues

我想你想要这样的东西:

Sub tgr()

    Dim wsData As Worksheet
    Dim wsCriteria As Worksheet
    Dim arrCriteria As Variant

    Set wsData = Sheets("Sheet2")
    Set wsCriteria = Sheets("Sheet1")
    arrCriteria = Application.Transpose(wsCriteria.Range("J4", wsCriteria.Range("J4").End(xlDown)).Value)

    With wsData.UsedRange
        .AutoFilter 10, arrCriteria, xlFilterValues
    End With

    Set wsData = Nothing
    Set wsCriteria = Nothing
    If IsArray(arrCriteria) Then Erase arrCriteria

End Sub

如果您只是在VBA中定义数组呢

Dim CritArray(2) as String
 CritArray(0) = Cells(1,1).Value
 CritArray(1) = Cells(2,1).Value
然后只需编辑您的代码行:

.AutoFilter Field:=10, Criteria1:=Array(CritArray(0),CritArray(1)), Operator:=xlFilterValues

我不知道您有多少标准(或它们的位置),但您可以添加/编辑这些标准。我之所以这样做,是因为您只有两个标准,但它当然可以放大。

您好TigerAvatar,谢谢您,根据上述标准,它选择了表1中的所有值,但表1中有过滤值。当我将其修改为:arrCriteria=Application.Transpose(wsCriteria.Range(wsCriteria.Cells(4,10)、wsCriteria.Cells(4,10)、End(xlDown)).SpecialCells(xlCellTypeVisible.Cells.Value)时,它只取第一个值,不取下一个值。为什么要使用SpecialCells(xlCellTypeVisible)?您是否在标准所在的位置有隐藏行?如果筛选器的critiera列表是一个连续的、未中断的列表,则最好。是的,它具有未中断的列表。在我的工作表1中,当我根据第10列中的Sheet1数据值在其中一列(第10列)上选择过滤器时,我希望在工作表2中进行过滤。因此,如果我在sheet1中使用10个值过滤第10列,那么基于sheet1中的10个值,应该过滤第2页。可以实现吗?因此,删除
.SpecialCells(xlCellTypeVisible)
使其读作
arrCriteria=Application.Transpose(wsCriteria.Range(“J4”,wsCriteria.Range(“J4”).End(xlDown)).Value)
不确定,其显示“类型不匹配”错误:arrCriteria=Application.Transpose(wsCriteria.Range(“J4”,wsCriteria.Cells.Cells)(Rows.count,“J”).End(xlDown)).Value)