Excel VBA中不带自动筛选的筛选列表
我希望能够根据列表框中选择的条件筛选列表。这是我目前的做法Excel VBA中不带自动筛选的筛选列表,vba,excel,filter,Vba,Excel,Filter,我希望能够根据列表框中选择的条件筛选列表。这是我目前的做法 Private Sub Worksheet_Change(ByVal Target As Range) With Sheet1 .AutoFilterMode = False .Range("A1:D1").AutoFilter .Range("A1:D1").AutoFilter field:=2, Criteria1:=Range("H9").Value End With End Sub 我对自动筛选的问题
Private Sub Worksheet_Change(ByVal Target As Range)
With Sheet1
.AutoFilterMode = False
.Range("A1:D1").AutoFilter
.Range("A1:D1").AutoFilter field:=2, Criteria1:=Range("H9").Value
End With
End Sub
我对自动筛选的问题是,它实际上会从列表框中隐藏不符合条件的行。我想要的是,单个数据行被隐藏,但不知何故被从实际列表中删除,下面的值没有被过滤,取而代之
例如:
Name Age
john 20
john1 28
john2 30
john3 20
john4 19
我设想的情况是,如果从下拉列表中选择20岁,john3将向上移动到john1所在的位置,其余的行将被删除(但不只是隐藏)
我的目标是创建一个大的数据列表,当从列表框中选择更多标准时,这些数据将“回滚”
谢谢大家! 如果您已经有了逻辑,可以完成自动筛选 您可以使用下面的代码将这些可见项添加到列表中 nRow将是可见的记录,使用数字控制要添加到列表框中的列值
Dim Rng, nRow As Range
Dim N As Single
Set Rng = ActiveSheet.AutoFilter.Range
For N = 2 To Rng.Rows.Count
Set nRow = Rng.Rows(N)
If Not nRow.Hidden Then
MsgBox nRow(1) '1 means first column of AutoFilter Range
End If
Next
我一直使用下面的代码“清理”一个大的过滤列表,并通过电子邮件将适当的子集发送给不同的人。它删除所有隐藏行,包括自动筛选隐藏的行请注意,您无法取回这些如果您希望能够“重置”列表,我会将列表的副本保存在另一张工作表上,并提供一些方法,以便在用户需要重置数据时将其重新复制到活动工作表中
Sub CutFromFilter()
Dim oRow As Range, rng As Range
Dim myRows As Range
With ActiveSheet
Set myRows = Intersect(.Range("A:A").EntireRow, .UsedRange)
If myRows Is Nothing Then Exit Sub
End With
For Each oRow In myRows.Columns(1).Cells
If oRow.EntireRow.Hidden Then
If rng Is Nothing Then
Set rng = oRow
Else
Set rng = Union(rng, oRow)
End If
End If
Next
If Not rng Is Nothing Then rng.EntireRow.Delete
ActiveSheet.Range("A1").Select
End Sub
那么,在没有自动筛选的情况下,您是如何让它工作的呢?当您说
listbox
时,您是指表单上的列表框吗?如果不是,您能否更清楚地解释您的意思,或者向我们展示您的工作表的样本数据以及您希望它在处理后的外观?您的意思是,您希望在列表框中仅显示实际可见行的值?为什么要删除这些行?也许可以用比实际删除行(您需要一个存储行的位置)更简单的方式实现您想要的结果。您介意使用UDF吗?如果你的文件列表很大,那么它的响应速度就不会那么快