首页 > 解决方案 > 具有动态字段列的 VBA 自动过滤器

问题描述

我制作了一个按选定单元格值进行过滤的代码,以创建一个快速访问工具栏图标并使其过滤速度更快。当过滤器从 A 列开始时,它工作得很好。但是一些过滤器从 B 或 C 列开始......并且该值在另一列中被过滤,跳过完全相同数量的没有过滤器的空白列。你们知道怎么解决吗?如何让 VBA 返回字段编号?

Sub Filtro_Valor_Célula()
'Filtra a coluna pelo valor da célula selecionada
'


    Valor = ActiveCell.Value

    ActiveSheet.Range(ActiveSheet.AutoFilter.Range.Address).AutoFilter Field:=ActiveCell.Column, Criteria1:=Valor


End Sub

标签: excelvbaautofilter

解决方案


我在理解您的问题时遇到了一些麻烦,但我认为您的情况如下所示:

在此处输入图像描述

在此示例中,如果运行给定的代码,我们将在 E 列而不是 C 列上进行过滤。

这是因为选定的单元格在第 3 列中。但是我们要过滤的字段不是自动过滤器中的第三个字段——它是自动过滤器中的第一个字段。看起来这段代码Field:=ActiveCell.Column没有为我们做正确的事情。

试试这个:

Sub Filtro_Valor_Célula()
'Filtra a coluna pelo valor da célula selecionada
'


    Valor = ActiveCell.Value
    FieldToFilter= ActiveCell.Column - ActiveSheet.AutoFilter.Range.Column + 1

    ActiveSheet.Range(ActiveSheet.AutoFilter.Range.Address).AutoFilter Field:=FieldToFilter, Criteria1:=Valor


End Sub

这里我们取选定列的位置 (ActiveCell.Column) 并减去我们的 AutoFilter 开始的列号。我们希望从 1 而不是零开始计数,所以我们需要在结果中加 1。

在此处输入图像描述

希望能帮助到你。


推荐阅读