如何通过名称而不是索引为VBA的自动过滤功能指定一个列?

时间:2017-12-04 09:13:35

标签: excel vba excel-vba

我是VBA的新手并尝试自动过滤列范围。该列名为" Vlookup"并位于指数位置27.

rData.AutoFilter field:=27, Criteria1:="Class" ' filter criterion

为了使这个动态化,我需要能够根据列名而不是列索引进行过滤。

但是,当我这样做时

rData.AutoFilter field:=Application.Match("Vlookup", Selection.Rows(1), 0), Criteria1:="Class"  ' filter criterion

我屈服

  

运行时错误' 424' - 需要对象

如何在VBA中按列名正确Autofilter

3 个答案:

答案 0 :(得分:4)

不知道选择了什么选项,但是我们遇到了类似的问题,我们发现使用表作为数据很简单,然后使用Field:= Listobject.ListColumns(“ Column Name”)。Index。这样,您的解决方案就是动态的。

ggplot(pres_munic, aes(Year, Number)) + facet_wrap(~ Municipality) + geom_bar(aes(fill = Nationality), 
                                          width = 0.4, position = position_dodge(width=0.5), stat="identity") +  
  theme(legend.position="top", legend.title = 
      element_blank(),axis.title.x=element_blank(), 
    axis.title.y=element_blank())

答案 1 :(得分:3)

您可以使用Find功能查找" Vlookup"在标题行中,然后检索Column的数值。

注意:无需使用Selection,而是使用Rows(1)工作表对象完全限定rData(使用{{ 1}}陈述)。

请参阅下面的代码和评论:

With rData

答案 2 :(得分:2)

您可以使用将返回列索引的辅助UDF:

Function GetIndex(colName As String)
    GetIndex = WorksheetFunction.Match(colName, ActiveSheet.AutoFilter.Range.Rows(1), 0)
End Function

<强> UPD

您可以将ActiveSheet替换为您的工作表。