Excel VBA-过滤数据,然后删除过滤器,使过滤后的数据保持隐藏状态
我正在创建一个包含多列的报告。我需要隐藏所有列都有$0的行。使用VBA,我添加了最后一列,如果前面的所有列都为零,则该列等于零。然后,我在最后一列上运行自动筛选,以隐藏应该隐藏的列。然后我想删除最后一列,但保留隐藏的行。但是,如果删除该列,则过滤器将撤消。我记得几年前,我有一种方法在删除筛选列后保留筛选,但我不记得我是如何做到的 谢谢您的帮助。我想这样可以:Excel VBA-过滤数据,然后删除过滤器,使过滤后的数据保持隐藏状态,excel,vba,Excel,Vba,我正在创建一个包含多列的报告。我需要隐藏所有列都有$0的行。使用VBA,我添加了最后一列,如果前面的所有列都为零,则该列等于零。然后,我在最后一列上运行自动筛选,以隐藏应该隐藏的列。然后我想删除最后一列,但保留隐藏的行。但是,如果删除该列,则过滤器将撤消。我记得几年前,我有一种方法在删除筛选列后保留筛选,但我不记得我是如何做到的 谢谢您的帮助。我想这样可以: Dim StartCell As Range, CurrentCell As Range Set StartCell = Range("G
Dim StartCell As Range, CurrentCell As Range
Set StartCell = Range("G2") 'the start cell of your filter column
Set CurrentCell = StartCell
Dim i As Integer
i = 0
Do While CurrentCell.Value <> ""
If CurrentCell.Value = 0 Then
CurrentCell.EntireRow.Hidden = True
End If
i = i + 1
Set CurrentCell = StartCell.Offset(i, 0)
Loop
Dim StartCell作为范围,CurrentCell作为范围
将StartCell=Range(“G2”)设置为筛选列的起始单元格
设置CurrentCell=StartCell
作为整数的Dim i
i=0
当CurrentCell.Value“”时执行此操作
如果CurrentCell.Value=0,则
CurrentCell.EntireRow.Hidden=True
如果结束
i=i+1
设置CurrentCell=StartCell.Offset(i,0)
环
您可以使用“数据”选项卡上的“高级过滤器”功能来实现这一点
您可以就地筛选列表(不带筛选箭头),也可以将列表筛选到同一工作表中的其他位置添加了(感谢pnuts)屏幕截图中的列表范围应为A5:L107
如果值是字符串,那么COUNTIF中的条件将是“$0”,但我希望它们是数字
数字12是示例表中的列数
如果您想在某些VBA代码中使用这些步骤,请记录这些步骤。您可以进行相反的筛选,手动隐藏所有行,然后删除筛选器…(我不知道会发生什么情况)插入筛选器将行高设置为0?(您已经在VBA中…(或者实际删除了行…)我之所以要使用筛选器,是因为当您手动隐藏行时,可能需要几秒钟,而筛选以毫秒为单位。我之所以要使用筛选器,是因为当您手动隐藏行时,可能需要几秒钟,过滤以毫秒为单位。您是否尝试过在代码之前使用
Application.ScreenUpdate=false
,在代码之后使用Application.ScreendUpdating=true
?以下内容可能很有趣,但与问题没有直接关系。如果我们在包含所有零的行之一的单元格中单击,请按Ctrl-a选择表格,然后按Ctrl-G(转到),单击特殊。。并选择列差异,这将选择不包含零行的所有数据。然后我们可以Ctrl-C(复制)并粘贴到表下的单个单元格中,以复制除完全为零的行以外的所有行。Excel很酷@pnuts+1个好位置,谢谢。