Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-过滤数据,然后删除过滤器,使过滤后的数据保持隐藏状态_Excel_Vba - Fatal编程技术网

Excel VBA-过滤数据,然后删除过滤器,使过滤后的数据保持隐藏状态

Excel VBA-过滤数据,然后删除过滤器,使过滤后的数据保持隐藏状态,excel,vba,Excel,Vba,我正在创建一个包含多列的报告。我需要隐藏所有列都有$0的行。使用VBA,我添加了最后一列,如果前面的所有列都为零,则该列等于零。然后,我在最后一列上运行自动筛选,以隐藏应该隐藏的列。然后我想删除最后一列,但保留隐藏的行。但是,如果删除该列,则过滤器将撤消。我记得几年前,我有一种方法在删除筛选列后保留筛选,但我不记得我是如何做到的 谢谢您的帮助。我想这样可以: Dim StartCell As Range, CurrentCell As Range Set StartCell = Range("G

我正在创建一个包含多列的报告。我需要隐藏所有列都有$0的行。使用VBA,我添加了最后一列,如果前面的所有列都为零,则该列等于零。然后,我在最后一列上运行自动筛选,以隐藏应该隐藏的列。然后我想删除最后一列,但保留隐藏的行。但是,如果删除该列,则过滤器将撤消。我记得几年前,我有一种方法在删除筛选列后保留筛选,但我不记得我是如何做到的

谢谢您的帮助。

我想这样可以:

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个好位置,谢谢。