【问题标题】:Excel VBA filtering data without deleting blanksExcel VBA过滤数据而不删除空格
【发布时间】:2021-09-23 15:12:56
【问题描述】:

我有一个关于在 Excel/VBA 中过滤列中的文本的问题。这是我的出发点(无法发布图片):

Column1 Column2 Column3
value1 bla bla
empty bla bla
value2 bla bla
value1 bla bla
empty ​ bla bla
value2 bla bla

我想要做的是在“Column1”上为“value1”使用文本过滤器,以便结果包括 column1 中具有“空”值的行。过滤结果应该是这样的:

Column1 Column2 Column3
value1 bla bla
empty bla bla
value1 bla bla
empty ​ bla bla

但是,当我在 Excel 中对 column1 使用普通文本过滤器作为“value1”时,我得到了这个结果,而 Column1 中没有“空”的行:

Column1 Column2 Column3
value1 bla bla
value1 bla bla

我缺乏的是如何在 Excel / VBA 中完成此操作的一般概念。不知何故,空行应该在某种范围内“连接”到“value1”的行? 任何建议都非常感谢!

【问题讨论】:

  • 过滤器有一个“空白”选项:i.stack.imgur.com/cxQsE.png
  • @BigBen 是的,谢谢。但是,这给了我所有的空白,但我只想要“好”值下的空白(在上面的 value1 示例中)而不是 value2 下的空白。所以它应该是有条件的......

标签: excel vba filter


【解决方案1】:

使用宏记录器,然后进行一些清理:

Sub Macro1()
    With Range("A1:C7")
        .AutoFilter
        .AutoFilter Field:=1, Criteria1:="=value1", _
            Operator:=xlOr, Criteria2:="="
    End With
End Sub

【讨论】:

  • 感谢您的回复 - 我想我已经完成了一半。据我了解,这会给我带来表格中的所有空白。但是,我只想得到那些处于“良好价值”(value1)之下的空白,而不是那些低于 value2 的空白。所以它应该是有条件的......这可能吗?
【解决方案2】:

您可以使用 VBA 设置与使用 Excel 中的过滤器设置的过滤器相同的过滤器。使用宏记录器揭示语法。

假设要过滤A到C列的数据,可以使用

ActiveSheet.Range("$A:$C").AutoFilter Field:=1, Criteria1:="=value1", _ 
    Operator:=xlOr, Criteria2:="="

如您所见,对空白的搜索是使用过滤条件"="完成的

如果您想查看多个值的所有值加上个空格,请使用

ActiveSheet.Range("$A:$C").AutoFilter Field:=1, _
      Criteria1:=Array("value1", "value2", "="), Operator:=xlFilterValues

您将所有想要查看的值放入一个数组中,然后将该数组作为参数传递给 Criteria1。同样,空白由"=" 表示。

更新 如果您想使用自动过滤器来显示所有具有特定值的行空白并且前一行具有该值,您可以使用辅助列来解决这个问题。假设您的条件在 A 列中,请在辅助列中输入一个公式:=IF(A2="",A1,A2) 并在此列上进行过滤。

如果您不想要辅助列,则需要编写一个 VBA 例程,逐行检查是否显示或隐藏该行。

【讨论】:

  • 感谢您的回复 - 我想我已经完成了一半。据我了解,这会给我带来表格中的所有空白。但是,我只想得到那些处于“良好价值”(value1)之下的空白,而不是那些低于 value2 的空白。所以它应该是有条件的......这可能吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-11
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
相关资源
最近更新 更多