我已经为此陷入了困境,并且可能会被告知我以错误的方式进行了处理,但无论如何:
我有一组按钮,我希望用户能够按下这些按钮来自动过滤数据集。按钮应该过滤每一列,但每个按钮都应该在已经存在的任何过滤器之上进行过滤。我可以使用普通的自动过滤器;但是看来我的文本选项有限(仅限于 2 个?)。最重要的是,理想情况下,我希望用户能够在自己的文本中编写以供将来过滤。
因此,我在单独的工作表中构建了一些动态命名范围,当用户输入其他文本(即过滤器将调用的文本短语)时,它们会自动扩展。在下面的示例中,我调用了以下列表之一:“List_of_text_to_be_filtered_1”
关于在任何时候过滤哪些列,我制作了另一个动态命名范围(将范围自动扩展到最后一行),称为“ColumnA”:
Option Explicit
Sub Sort1()
With ActiveSheet
.Range("columnA").AdvancedFilter _
Action:=xlFilterInPlace, _
CriteriaRange:=Range("List_of_text_to_be_filtered_1")
End With
End Sub
我遇到的问题是我有另一组基本相同的代码,例如
Option Explicit
Sub Sort1()
With ActiveSheet
.Range("columnB").AdvancedFilter _
Action:=xlFilterInPlace, _
CriteriaRange:=Range("List_of_text_to_be_filtered_2")
End With
End Sub
但是当用户运行它时,高级过滤器会被重置并且不会建立在最后一个过滤器上。有没有办法建立在最后一个高级过滤器上?
如果您想查看我的动态命名范围公式,请告诉我。
谢谢。
编辑:
我已将其更改为使用数组进行自动过滤,但仍然无法正常工作(它似乎选择了列表中的每个项目,但没有显示任何内容):
Sub CellsToArray()
Dim x As Integer
Dim myArray As Variant, lastrow As Long
With Range("Names_backup")
intFirstCol = .Column
intlastcol = intFirstCol + .Columns.Count - 1
End With
With shLists
lastrow = .Cells(.Rows.Count, ("T")).End(xlUp).Row
End With
For x = Range("Names_backup").Row To lastrow
myArray = Cells(x, intlastcol).Value
x = x + 1
Next x
With Range("ColumnA")
intFirstCol = .Column
intlastcol = intFirstCol + .Columns.Count - 1
End With
Range("ColumnA").AutoFilter Field:=intlastcol, Criteria1:=Array(myArray), Operator:=xlFilterValues
End Sub
其中 Names_Backup 是包含应用于过滤的文本单词列表的单元格标题。“ColumnA”是我要过滤的列的命名范围。