2015-06-22 75 views
2

我使用下面的VBA代码来过滤我的Excel中的行根据我在C5单元格的值使用vba和过滤器的excel搜索引擎?

Sub DateFilter() 
    'hide dialogs 
    Application.ScreenUpdating = False 
    'filter for records that have June 11, 2012 in column 3 
    ActiveSheet.Range("C10:AS30").AutoFilter Field:=1, Criteria1:="*" & ActiveSheet.Range("C5").Value & "*" 
    Application.ScreenUpdating = True 
End Sub 

我的Excel列的样子:

A   B   C    
Gold   XXX  Manchester 
Silver  TTT  London 
Black  ZZZ  Scotland 
White  WWW  Wales 

所以,如果我输入单词在我的小区C5“黄金”,跑到我行得到过滤,只有下面的宏将被显示:

Gold  XXX  Manchester 

不过,现在我希望能够通过将筛选我行从列a,b或c中的值输入到我的单元格c5中并过滤行。

所以,如果我输入字母“TTT”到C5单元格,这将会过滤我行像这样:

Silver  TTT  London 

如果我在威尔士输入到单元格C5它过滤像我行:

White  WWW Wales 

我想要做的另一件事是能够根据多种搜索条件来筛选我行,所以如果我把从列A,b和C的值的组合,我的手机C5像这样:

White WWW Wales 

然后我结束了以下过滤结果:

White  WWW  Wales 

请能有人告诉我,我会怎么能够做到这一点?在此先感谢

+1

您如何期望Excel或VBA知道您的文本适用于哪一列?一旦你弄清楚了,你将会很好地解决问题。例如,列B总是三个字符?如果是这样,你可以建立一些逻辑来检查单元格C5的长度,如果它等于3,你知道它适用于列B.现在如果有人输入'红色',你会被堵塞,但希望你可以制定出来关于如何处理该问题的一些逻辑(也许是首先检查的颜色列表)。在开始编码之前,确实需要做出许多设计决定......至少这是我的0.02美元。 – sous2817

+0

从这些列添加包含连接字符串的辅助列,并用空格分隔。此列将用于过滤,如果需要,您可以隐藏它。也可以尝试不同的选项,例如用*替换搜索字符串中的所有空格,等等。 – omegastripes

回答

0

为了让“任何”筛选栏中,你可以结合一个查找结果,并过滤这样的:

Sub DateFilter() 
Dim nRow As Range 
Dim toSearch As Range 
    'hide dialogs 
    Application.ScreenUpdating = False 
    'filter for records that have June 11, 2012 in column 3 

    Set toSearch = Range("A1:C4") 
    'detect row that matches criteria: 
    Set nRow = toSearch.Find(ActiveSheet.Range("C5").Value) 
    If Not (nRow Is Nothing) Then 
     ActiveSheet.Range("C1:A4").AutoFilter Field:=nRow.Column, Criteria1:="*" & nRow.Value & "*" 
    End If 
    Application.ScreenUpdating = True 
End Sub 

这个我试过用A1粘贴到C4你的价值观,以C5为我的搜索文本单元格。你将不得不调整这些值,但除此之外,你应该没问题。

对于您最后一次查询“White WWW Wales”,我建议在列AA左右的某个地方使用omegastripes对附加连接单元格的建议。

+0

感谢您的代码,但是我无法得到它为我工作?它只搜索一个不超过该值的列。 –

+0

它搜索您在'toSearch'中定义的整个范围。虽然有一个不同的错误:'AutoFilter'的'Field'属性没有正确设置。编辑代码以反映这一点。 – LocEngineer