【问题标题】:excel search engine using vba and filters?使用 vba 和过滤器的 excel 搜索引擎?
【发布时间】:2015-06-22 15:14:45
【问题描述】:

我正在使用以下 vba 代码根据单元格 C5 中的值过滤我在 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”并运行宏,我的行将被过滤,并且只会显示以下内容:

Gold        XXX       Manchester

但是,现在我希望能够通过将列 a、b 或 c 中的值放入单元格 c5 并过滤行来过滤我的行。

因此,如果我在单元格 c5 中输入字母“TTT”,这将过滤我的行,如下所示:

Silver       TTT       London

如果我在单元格 c5 中输入威尔士,它会过滤我的行,如下所示:

White      WWW    Wales

我想做的另一件事是能够根据多个搜索条件过滤我的行,所以如果我将 a、b 和 c 列中的值组合到单元格 c5 中,如下所示:

White  WWW Wales 

然后我得到以下过滤结果:

White      WWW       Wales 

请有人告诉我如何做到这一点?在此先感谢

【问题讨论】:

  • 您希望 Excel 或 VBA 如何知道您的文本适用于哪一列?一旦你弄清楚了,你就会很好地找到解决方案。例如,B 列总是三个字符吗?如果是这样,你可以建立一些逻辑来检查单元格 C5 的长度,如果它等于 3,你知道它适用于 B 列。现在如果有人输入“红色”,你会被卡住,但希望你能解决关于如何处理的一些逻辑(可能是首先检查的颜色列表)。在开始编码之前,您确实需要做出很多设计决策……至少是我的 0.02 美元。
  • 添加包含来自这些列的连接字符串并用空格分隔的辅助列。此列将用于过滤,您可以根据需要将其隐藏。还可以尝试不同的选项,例如将搜索字符串中的所有空格替换为 * 等。

标签: excel vba


【解决方案1】:

为了过滤“任何”列,您可以像这样组合查找结果和过滤器:

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”,我建议您使用 omegastripes 的建议,即在 AA 列左右的某处额外连接单元格。

【讨论】:

  • 感谢您的代码,但我无法让它为我工作?它只搜索一列而不是更多
  • 它搜索您在toSearch 中定义的整个范围。但是有一个不同的错误:AutoFilterField 属性未正确设置。编辑代码以反映这一点。
猜你喜欢
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-04
  • 1970-01-01
  • 2016-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多