【问题标题】:creating an array to use in autofiltering VBA创建用于自动过滤 VBA 的数组
【发布时间】:2016-05-31 12:09:13
【问题描述】:

非常感谢您在以下方面的任何帮助:

我正在通过彩色文本从“myData”范围获取用户输入,以用于自动过滤更大的范围 - 所以这里是查找红色文本单元格的地址及其值的代码:

Set rRng = Sheet1.Range("myData")

For Each rCell In rRng.Cells
    If rCell.Font.ColorIndex = 3 Then 
    Debug.Print rCell.Address, rCell.Value
    Counter = Counter + 1
    End If
Next rCell

我必须将这些发现放入一个数组中并使用它们来过滤选择(选择在此时进行并选择,即“myTable”);当然,调查结果确实告诉我们要使用哪些字段和哪些值:所以如果调查结果显示:c18 "x"、d19 "y" 和 d21 "z",自动过滤器将不得不说:

With ActiveSheet
    .AutoFilterMode = False
        With .Range("myTable")
            .AutoFilter
            .AutoFilter Field:=3, Criteria1:="x"
            .AutoFilter Field:=4, Criteria1:="y", Operator:=xlOr, Criteria2:="z"
        End With
        Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1).Select
        Selection.Font.ColorIndex = 3
End With

两个代码都按原样工作,但我当然必须编写代码来自动化整个过程。 谢谢。

【问题讨论】:

    标签: arrays excel vba filter autofilter


    【解决方案1】:

    可能有更好更快的方法,但我能够使用以下代码解决它:

    我通过以下代码将条件读入一个数组:

    Set rRng = Sheet1.Range("myData")
    
    For Each rCell In rRng.Cells
    
        If rCell.Font.ColorIndex = 3 Then '3 = Red
    
            Counter = Counter + 1
    
            myAddress(Counter) = rCell.Column - 1
            myValues(Counter) = rCell.Value
    
            Debug.Print rCell.Address, rCell.Value
            Debug.Print myAddress(Counter), myValues(Counter)
    
        End If
    
    Next rCell
    
    ReDim Preserve myAddress(Counter + 1)
    ReDim Preserve myValues(Counter + 1)
    

    然后我就可以在自动过滤中使用数组了:

    Range("myFirst").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Set myTable = Selection
    
    With ActiveSheet
        .AutoFilterMode = False
            With .Range("myTable")
                .AutoFilter
    
                For i = 1 To Counter
                    .AutoFilter Field:=myAddress(i), Criteria1:=myValues, Operator:=xlFilterValues
                Next i
    

    ' 结束于 Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1).Select Selection.Font.ColorIndex = 3 结束于

    【讨论】:

      猜你喜欢
      • 2018-09-26
      • 1970-01-01
      • 2014-02-10
      • 1970-01-01
      • 2017-04-09
      • 2022-01-23
      • 2017-01-12
      • 1970-01-01
      相关资源
      最近更新 更多