过滤xlCellTypeVisible后的Excel VBA范围

Mik*_*key 3 excel vba range filter excel-vba

我想要完成的任务:从特定地址打开工作簿,过滤第一列的值等于36或541(我得到第一部分工作),然后检查第3列以查看值是否存在以及是否存在然后过滤除第3列中值2之外的所有内容; 如果第3列中不存在值2,则跳过.

我尝试使用SpecialCells(xlCellTypeVisible)命名新范围但我必须错误地使用它,因为它给我的值2仅存在于尚未过滤数据的旧范围内.

谢谢你的时间!

Sub filters()

Dim wb As Workbook
Dim nwb As Workbook

Set wb = ThisWorkbook

Set nwb = Workbooks.Open("ADDRESS.FILE.xlsx")

With ActiveSheet

.AutoFilterMode = False
.Range("$A$1:$AD$5000").AutoFilter Field:=1, Criteria1:="=36", Operator:=xlOr, Criteria2:="=541"
'.Range("$A$1:$AD$5000").AutoFilter Field:=3, Criteria1:="2"

End With

Dim newrange As Range

Set newrange = ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible)

Dim i As Integer, intValueToFind As Integer
intValueToFind = 2
For i = 1 To 5000    ' Revise the 5000 to include all of your values
    If newrange(i, 3).Value = intValueToFind Then
        MsgBox ("Found value on row " & i)
        Exit Sub
    End If
Next i

' This MsgBox will only show if the loop completes with no success
MsgBox ("Value not found in the range!")


End Sub
Run Code Online (Sandbox Code Playgroud)

Tim*_*ams 5

这样的事情应该有效:

Dim newrange As Range, rw as range

Set newrange = ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible)

Dim intValueToFind As Integer
intValueToFind = 2
For Each rw in newrange.Rows
    If rw.cells(3).Value = intValueToFind Then
        MsgBox ("Found value on row " & rw.cells(1).Row)
        Exit Sub
    End If
Next rw
Run Code Online (Sandbox Code Playgroud)