我希望能够根据列表框中选择的条件过滤列表。这是我目前的做法。
# echo $?
137
我对autofilter的问题是它实际上隐藏了不符合列表框条件的行。我想要的是个人数据行被隐藏,但以某种方式被从实际列表中删除,并且下面的值未被过滤取代它。
例如:
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
我想象的是,如果从下拉列表中选择20岁,john3将会移动到john1所在的位置,其余行将被移除(但不会被隐藏)。
我的目标是创建一个大型数据列表,当从列表框中选择更多条件时,这些数据将“回滚”。
谢谢!
答案 0 :(得分:1)
我一直使用下面的代码来“清理”大型过滤列表,并通过电子邮件将适当的子集发送给不同的人。它会删除所有隐藏的行,包括自动过滤器隐藏的行。 请注意,您无法取回这些内容!如果您希望能够“重置”您的列表,我会将该列表的副本保存在另一张表格中,并为其提供一些方法当用户需要重置数据时,将重新复制到活动工作表中。
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
答案 1 :(得分:0)
如果你已经有逻辑可以完成自动过滤,
您可以使用以下代码将这些可见项添加到列表中
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