首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迭代AutoFilter的AutoFilter数组值

迭代AutoFilter的AutoFilter数组值
EN

Stack Overflow用户
提问于 2016-12-12 20:40:26
回答 1查看 679关注 0票数 1

我已经搜索了一个小时了,我肯定没有使用正确的术语,因为我似乎找不到任何我认为我需要做的事情。

我有一个小数据集,~100行x9科尔。

我已经让两个学院对其进行了过滤,由此产生的数据集已经减少到8个记录。但是,我需要根据这8条记录再过滤一列。如何迭代该列的Criteria1数组?(Col A)

我想逐步遍历每个元素,并测试它通过的it...if,如果是not...remove,则保留它。但是,我似乎无法理解如何逐步遍历现有Criteria1 1的值数组。

我还想也许我可以使用For循环并逐步遍历过滤过的行,但是它跨过所有数据行,而不是过滤的数据行.

代码语言:javascript
复制
index = 1
'Just picked a range that started in the data area and would be past the number of items I need to go through
For i = 6 To 30                    'First row # of filtered data is 13
  If Cells(i, "A") = "" Then
    'Blank Line
    Exit For
  Else
    aTest(index) = Cells(i, "A")
    Debug.Print aTest(index)      'Steps through each row of the unfiltered data, not filtered
    index = index + 1
  End If
Next i

本质上,这是我需要遍历的值数组,并删除以90结尾的值。

代码语言:javascript
复制
ActiveSheet.Range("$A$5:$M$108").AutoFilter Field:=1, _
  Criteria1:=Array("31510", "31605", "31607", "31608", "31690", "81603", _
                   "81604", "81690"), Operator:=xlFilterValues

需要有人指点我的方向..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-12 21:49:26

你能试一试吗。该守则做了以下工作:

  • 获取列A中当前可见的单元格,因为您只想从可以看到的单元格中获取Criteria1的候选单元格
  • 处理该范围内的每个单元格,并应用测试,例如Right(val, 2) <> "90"和存储传递给数组的值
  • 向现有的AutoFilter添加一个新的筛选器,并向Criteria1参数提供数组

HTH

代码语言:javascript
复制
Option Explicit

Sub Test()

    Dim ws As Worksheet
    Dim rngFilter As Range
    Dim rngVisibleData As Range
    Dim rngCell As Range
    Dim varCriteria() As String
    Dim lngCounter As Long

    'quit if no filter
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    If Not ws.AutoFilterMode Then
        Exit Sub
    End If

    'get visibile cells in column A as candidates for filter
    Set rngVisibleData = ws.Range("A2", ws.Range("A2").End(xlDown)).SpecialCells(xlCellTypeVisible)

    'process candidates
    lngCounter = 0
    For Each rngCell In rngVisibleData
        If Right(CStr(rngCell.Value), 2) <> "90" Then
            lngCounter = lngCounter + 1
            ReDim Preserve varCriteria(1 To lngCounter)
            varCriteria(lngCounter) = CStr(rngCell.Value)
            Debug.Print rngCell.Value
        End If
    Next rngCell

    'add new filter with processed candidates
    Set rngFilter = Range("A1").CurrentRegion
    rngFilter.AutoFilter Field:=1, Criteria1:=varCriteria, Operator:=xlFilterValues

End Sub
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41109162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档