自动过滤/隐藏不包含数组中单词的单元格行

Autofilter / Hide rows of cells not containing words from array

我的 Excel 工作簿中有 2 个 sheet: Sheet1:三菱日联客户端 Sheet2:公司信息

所以基本上我想在 MUFG 客户端 sheet 的 "Keyword" 字段(字段 29)中从公司信息 sheet 中的另一个单元格 (I18) 执行自动筛选。单元格的内容是 vlookup 公式的结果,因此它会发生变化而不总是相同。这是我的 vba 代码:

Sub filter_by_cell_value ()
    Sheets("MUFG Client").Range("A2").Autofilter Field:=29, _
    Criteria1:="=Asterixsymbol" & Sheets("Company Information").Cells(18,6).Value & "*", xlOperator:= xlOr
End Sub

我的 objective 是我希望自动过滤器可以读取单元格 I18 中的文本 而无需 特定 text/criteria .

例如,如果单元格 I18 包含 Cosmetics、Chemical --> 我希望关键字字段中的自动筛选器可以显示 Cosmetics 或 Chemical 一词,那么

如果我将公司信息的内容sheet更改为不同的公司(vlookup 的结果),公司信息中的单元格 I18 将更改为 Food & Beverage、Business Expansion、FMCG--> 而我还希望关键字字段中的自动筛选器 (MUFG Client sheet) 显示 Food & Beverage 或 Business Expansion 或 FMCG(自动筛选通过忽略顺序包含这些词)

根据我上面的 vba 代码,单元格 (18,6) 是公司信息 Sheet 中的单元格 I18。

可以吗?我想我必须直接讨论这个问题才能让你们明白。如有误会请见谅

非常感谢...

如果您希望此 运行 在 Cells(18, 6) 上自动进行(顺便说一句,它是 F18 而不是 I18。在下面更改它以生成 I18)更改,然后使用计算事件。

如果单元格 I18 包含 "Cosmetics, Chemical" 那么过滤器应该是 "Cosmetics" 还是 "Chemical"?尝试关注

Sub filter_by_cell_value()

arr = Split(Sheets("Company Information").Cells(18, 9).Value, ",")

Sheets("MUFG Client").Range("A2").AutoFilter Field:=29, Criteria1:=arr, Operator:=xlFilterValues

End Sub

编辑 根据下面的评论,我们可以使用以下过程隐藏行。

Sub hide_Rows_by_cell_value()
Dim wb As Workbook, CompInfo As Worksheet, MufgClient As Worksheet
Dim srcCl As Range, lr As Long, FltCol As Range, cl As Range, hideRng As Range
Set wb = ThisWorkbook
Set CompInfo = wb.Sheets("Company Information")
Set MufgClient = wb.Sheets("MUFG Client")

Set srcCl = CompInfo.Cells(18, 9)
arr = Split(srcCl.Value, ",")

lr = MufgClient.Range("AC" & MufgClient.Rows.Count).End(xlUp).Row
Set FltCol = MufgClient.Range("AC3:AC" & lr) '2nd Row contains table headers

For Each cl In FltCol
    chk = 0
    For i = 0 To UBound(arr)
    chk = chk + InStr(1, cl.Value, Trim(arr(i)), vbTextCompare)
    Next
    If chk = 0 Then
        If hideRng Is Nothing Then
        Set hideRng = cl
        Else
        Set hideRng = Union(hideRng, cl)
        End If
    End If
Next

hideRng.EntireRow.Hidden = True

End Sub