通过一个Excel筛选多列的单元格

我search了一切,但找不到解决scheme来解决以下问题:我有多个列,列的单元格可以有以下值:空,“W”,“A”,“S”

现在我想过滤一个单元格的行 – 所以如果我把“W”放入我的“search单元格”应该只有行中可见的值在列的一个单元格中的值“W”

所以在过滤之前:

过滤之前

过滤后:

过滤后

这可能没有VBA?

这个代码只适用于scott:P

 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Me.Range("F1")) Is Nothing Then Application.ScreenUpdating = False Dim lastRow As Long, varArr As Variant, val As String, rowArr(1) As Range, i As Long val = LCase(Me.Range("F1").Value2) Me.UsedRange.EntireRow.Hidden = False If Len(val) Then lastRow = Application.Max(Me.Cells(Me.Rows.Count, 1).End(xlUp).Row, _ Me.Cells(Me.Rows.Count, 2).End(xlUp).Row, _ Me.Cells(Me.Rows.Count, 3).End(xlUp).Row, _ Me.Cells(Me.Rows.Count, 4).End(xlUp).Row) varArr = Me.Range("A1:D" & lastRow).Value2 For i = 3 To lastRow If val = LCase(varArr(i, 1)) Or val = LCase(varArr(i, 2)) Or val = LCase(varArr(i, 3)) Or val = LCase(varArr(i, 4)) Then If rowArr(0) Is Nothing Then Set rowArr(0) = Me.Rows(i) Else Set rowArr(0) = Union(rowArr(0), Me.Rows(i)) End If Else If rowArr(1) Is Nothing Then Set rowArr(1) = Me.Rows(i) Else Set rowArr(1) = Union(rowArr(1), Me.Rows(i)) End If End If Next rowArr(0).EntireRow.Hidden = False rowArr(1).EntireRow.Hidden = True End If Application.ScreenUpdating = True End If End Sub 

(search字段是F1,大小写无关紧要)